OpenCV3 图像处理笔记
此笔记针对 Python 版本的 opencv3,c++ 版本的函数和 python 版本的函数参数几乎一样,只是矩阵格式从 ndarray 类型变成适合 c++ 的 mat 模板类型。注意,因为 python 版本的opncv只提供接口没有实现,故函数原型还是来自 c++版本的opencv,但是参数解释中的数据类型还是和 python 保持一致。
图像的载入:imread() 函数
函数原型:
Mat imread(const sting& filename, int flags=None)
参数解释:
filename:图像的文件路径,sting字符串类型flags:载入标识,以何种方式读取图片,int类型的flags。常用取值解释如下:flags = 0:始终将图像转成灰度图再返回flags = 1:始终将图像转换成彩色图再返回,如果读取的是灰度图,则其返回的矩阵shape将变为(height, width, 3)flags = 2:如果载入的图像深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回。
总结:读取文件中的图片到 OpenCV 中,返回 Mat 或者 ndarray 类型的矩阵,以彩色模式载入图像时,解码后的图像会默认以 BGR 的通道顺序进行存储。
cv2.imread()函数:
python-opencv 库的 imread 函数的 flags 参数取值方式与 C++ 版有所区别。使用函数 cv2.imread() 读入图像,图像要么在此程序的工作路径,要么函数参数指定了完整路径,第二个参数是要告诉函数应该如何读取这幅图片,取值如下:
cv2.IMREAD_COLOR: 取值1,读入一副彩色图像。图像的透明度会被忽略,这是默认参数。cv2.IMREAD_GRAYSCALE: 取值0,以灰度模式读入图像。cv2.IMREAD_UNCHANGED: 取值-1,读入一幅图像,并且包括图像的 alpha 通道。
Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively.
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)
opencv-python 库的读取图像函数 cv2.imread() 官方定义如下图。

图像的显示:imshow()函数
函数原型:
void imshow(const string &winname, InputArray mat)
参数解释:
winname:需要显示的窗口标识名称,string字符串类型mat:需要显示的图像矩阵,ndarraynumpy 矩阵类型
总结:imshow 函数用于在指定的窗口显示图像,窗口会自动调整为图像大小。
minMaxLoc 函数
函数 cv :: minMaxLoc 查找最小和最大元素值及其位置,返回的位置坐标是先列号,后行号(列号,行号) 。在整个数组中搜索极值,或者如果mask不是空数组,则在指定的数组区域中搜索极值。(只适合单通道矩阵)。函数原型:
CV_EXPORTS_W void minMaxLoc(InputArray src, CV_OUT double* minVal,
CV_OUT double* maxVal = 0, CV_OUT Point* minLoc = 0,
CV_OUT Point* maxLoc = 0, InputArray mask = noArray());
函数参数解释:
src:input single-channel array.minVal:pointer to the returned minimum value; NULL is used if not required.maxVal:pointer to the returned maximum value; NULL is used if not required.minLoc:pointer to the returned minimum location (in 2D case); NULL is used if not required.maxLoc:pointer to the returned maximum location (in 2D case); NULL is used if not required.
位深度的概念
- 灰度图的位深度是
16,则其矩阵的元素类型为uint16,彩色图其位深度一般是24,红色占8个位、蓝色占8个位、绿色占8个位,其矩阵的元素类型为uint8。 - 位分辨率(
Bit Resolution)又称色彩深度、色深或位深度,在位图图像或视频视频缓冲区,指一个像素中,每个颜色分量(Red、Green、Blue、Alpha通道)的比特数。 matplotlib.image.imsave将灰度图的矩阵保存为图像格式时,其默认保存的图像通道数为4:RGBA,其中RGB三个通道对应的二维矩阵数值完全一样。
OpenCV3 图像处理笔记的更多相关文章
- opencv3 图像处理(一)图像缩放( python与c++ 实现)
opencv3 图像处理 之 图像缩放( python与c++实现 ) 一. 主要函数介绍 1) 图像大小变换 Resize () 原型: void Resize(const CvArr* src,C ...
- 【图像处理笔记】SIFT算法原理与源码分析
[图像处理笔记]总目录 0 引言 特征提取就是从图像中提取显著并且具有可区分性和可匹配性的点结构.常见的点结构一般为图像内容中的角点.交叉点.闭合区域中心点等具有一定物理结构的点,而提取点结构的一般思 ...
- 数字图像处理笔记与体会(一)——matlab编程基础
最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了. 复习一下: 1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示 ...
- 图像处理笔记(二十一):halcon在图像处理中的运用
概要: 分水岭算法做图像分割 二维码识别 稍后将其他几篇笔记全都补充上概要方便查询. 分水岭算法做图像分割 使用距离变换结合分水岭算法实现图像分割,可以用来分割仅通过阈值分割还是有边缘连接在一起的情况 ...
- C#图像处理笔记
1.灰度拉伸 灰度拉伸又叫对比度拉伸,它是最基本的一种灰度变换,使用的是最简单的分段线性变换函数,它的主要思想是提高图像处理时灰度级的动态范围.
- laravel 的 intervention-image 图像处理笔记
安装: https://blog.csdn.net/beyond__devil/article/details/62230610 需求: PHP >= 5.4 Fileinfo 扩展 GD库 & ...
- OpenCV3学习笔记
http://blog.csdn.net/u010429424/article/details/73691001 http://blog.csdn.net/zhaoxfxy/article/detai ...
- OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )
转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...
- opencv3 学习笔记(二)
1.OpenCv 颜色追踪 import cv2import numpy as npcap=cv2.VideoCapture(0)cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1 ...
- opencv3 学习笔记(一)
1.cv2.imread(path,cv2.IMREAD_ANYCOLOR) IMREAD_ANYCOLOR=4(全彩模式)/IMREAD_GRAYSCALE=0(灰度模式)2.cv2.imwrite ...
随机推荐
- vue&element项目实战 之element使用&用户&字典模块实现
6.用户模块 用户模块api import request from '@/utils/request' export function login(data) { return request({ ...
- mybatis-plus系统化学习之查询专题
1.背景 查询在实际生产中用得最多,也最灵活. 2.查询案例 表结构: CREATE TABLE `sys_user` ( `id` int(32) NOT NULL AUTO_INCREMENT C ...
- Meissel_Lehmer模板
复杂度 \(O(n^\frac 23)\),计算 \(1\sim n\) 的素数个数 #define div(a, b) (1.0 * (a) / (b)) #define half(x) (((x) ...
- 最短路之Dijkstra
Dijkstra算法: Dijkstra是一种求解 非负权图 上单源最短路径的算法. 思路:将所有结点分为两个集合:已经确定最短路径的点(S)和未确定最短路长度的点集(T),开始时所有点都属于T 初始 ...
- Ubuntu20.04安装CUDA和CUDNN
CUDA是GPU深度学习的运行库,那么cuDNN就是训练加速工具,两者要相互配合使用,所以一般机器学习需要训练引擎(tensorflow-gpu) + CUDA + cuDNN使用.想不安装cuDNN ...
- Docker简单使用总结
写在前面 最近在部署前后端分离的SpringBoot项目,发现使用Docker技术很方便,特此记录一下Docker常用命令 1.常用网站 Docker docs :https://docs.docke ...
- 旧笔记本安装Win8.1实录
昨天发现一台尘封已久的Lenovo ideapad Y550,给它装上了Windows 10 然后第二天系统挂掉了 挂的原因是半夜万恶之源Windows更新开始造孽了 刚好没电 文件全坏了 真 解除封 ...
- 关于对 Tomcat 进行小版本升级的快速解决方案
1.背景描述 原来的 Tomcat 在部署时,使用的是最新的版本 9.0.40 . 经过一段时间后,在原来的 Tomcat 版本中,发现存在漏洞. 因此,需要将旧版本(9.0.40)升级到没有漏洞的新 ...
- JDK有用的新特性-Switch
目录 箭头表达式,新的 case 标签 yeild 返回值 Java Record Switch 的三个方面,参考: JEP 361 支持箭头表达式 支持 yied 返回值 支持 Java Recor ...
- 神经网络之卷积篇:详解池化层(Pooling layers)
详解池化层 除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,来看一下. 先举一个池化层的例子,然后再讨论池化层的必要性.假如输入是一个4×4矩阵,用到的 ...