openCV基本操作笔记
来源 | 极链AI云(性价比最高的共享GPU算力平台,双节活动进行中 9.25-10.1,新人注册可领取限定258元大礼包,价值100+小时的免费使用时长,领取地址:https://cloud.videojj.com/)作者 | sun极链AI云技术原创奖励计划原文地址 |openCV基本操作笔记(官网论坛)读取图片cv2.imread(filepath,flags)filepath:要读入图片的
来源 | 极链AI云(性价比最高的共享GPU算力平台,新人注册可领取限定198元大礼包,价值100+小时的免费使用时长,领取地址:https://cloud.videojj.com/)
作者 | sun 极链AI云技术原创奖励计划
原文地址 | openCV基本操作笔记(官网论坛)
读取图片
cv2.imread(filepath,flags)
- filepath:要读入图片的完整路径
- flags:读入图片的标志
- cv2.IMREAD_COLOR:默认参数,读入一副BGR彩色图片,忽略alpha通道
- cv2.IMREAD_GRAYSCALE:读入灰度图片
- cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道
- 返回值:一个rows * cols * depth的数组,
rows是图像像素的行数cols是图像像素的列数depth是图像颜色深度,灰度图一般是1 ,RGB图一般是3
显示图片
cv2.imshow('image',img)
- image:显示图像的窗口的名字
- img:要显示的图像(imread读入的图像)
保存图片
cv2.imwrite(file,img,[num])
- file:要保存的文件名
- img:保存的图像
- num:针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别,默认为3。
颜色空间转换函数
cv2.cvtColor(src, code, dst=None, dstCn=None)
- src: 原图像;
- code: 指定颜色空间转换类型,cv2.COLOR_BGR2RGB,cv2.COLOR_BGR2GRAY 等
- dst: 目标图像;与原图像大小深度一致;
- dstCn: 指定目标图像通道数;默认None,则会根据src、code自动计算;
图像仿射
cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst
- src :输入图像;
- M:变换矩阵,作为仿射变换矩阵,一般反映平移或旋转的关系,为numpy的float32类型的2×3的变换矩阵。
- dsize:输出图像的大小;
- flags :插值方法的组合(int 类型);
- borderMode :边界像素模式(int 类型);
- borderValue :边界填充值; 默认情况下,它为0。
获得仿射变化矩阵
cv2.getRotationMatrix2D(center, angle, scale) -> Mat
- center:图片的旋转中心
- angle:旋转角度
- scale:缩放比例
- Mat:仿射变换矩阵,2×3的变换矩阵。
图像缩放
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
- src:原图像d
- size:输出图像所需大小
- fx:沿水平轴的比例因子
- fy:沿垂直轴的比例因子
- interpolation:插值方式
画图
画直线、矩形
cv2.line(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img
cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]]) → img
- img:背景图
- pt1:直线起点坐标
- pt2:直线终点坐标
- color,当前绘画的颜色。如在BGR模式下,传递(255,0,0)表示蓝色画笔。灰度图下,只需要传递亮度值即可。
- thickness,画笔的粗细,线宽。若是-1表示画封闭图像,如填充的圆。默认值是1
- lineType,线条的类型
- 如8-connected类型、anti-aliased线条(反锯齿),默认情况下是8-connected样式ide,cv2.LINE_AA表示反锯齿线条,在曲线的时候视觉效果更佳。
画圆形
cv2.circle(img, center, radius, color[, thickness[, lineType[, shift]]]) → img
- img:背景图
- center:圆心
- radius:半径
- color:颜色
- thickness:线粗细
添加文本
cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]]) → None
- img:图片
- text:想要输出到图像上的的文本
- org:文字的起始坐标(左下角为起点)
- position:输出位置的坐标
- Font type:字体,可以用cv2.putText()函数文档查看支持的字体
- Font Scale,指定字体大小,文字大小(缩放比例)
- 其他,如颜色,线宽,线型等,推荐使用lineType = cv2.LINE_AA
几何变换
图像翻转
cv2.flip(src, flipCode[, dst]) → dst
- src: 原始图像矩阵;
- dst: 变换后的矩阵;
- flipMode: 翻转模式,有三种模式
- 0 --- 垂直方向翻转; 1----- 水平方向翻转; -1:水平、垂直方向同时翻转
图像加法
cv2.add(src1, src2, dst=None, mask=one)
- src1:图像1
- src2:图像2
- dst:返回结果
- mask:指定msk区域进行操作。
图像减法
cv2.substract(src1, src2, dst=None, mask=one)
图像与、或、非、异或运算
cv2.bitwise_and(src1, src2, dst=None, mask=one)
cv2.bitwise_or(src1, src2, dst=None, mask=None)
cv2.bitwise_not(src1, src2, dst=None, mask=None)
cv2.bitwise_xor(src1, src2, dst=None, mask=None)
图像通道拆分
cv2.split(m [,mv]) -> mv
- m:输入多通道数组。
- mv:输出数组或数组向量
图像通道合并
cv2.merge(mv [,dst]) -> dst
- mv:要合并的矩阵的输入数组或向量;所有的矩阵都
mv必须具有相同的大小和深度。 - dst:具有与相同大小和相同深度的输出数组
mv[0];通道数将是矩阵数组中通道的总数。
图像下采样
cv2.pyrDown(src, dst=None, dstsize=None, borderType=None)
- src:表示输入图像
- dst:表示输出图像
- dstsize:表示输出图像的大小
- borderType:表示图像边界的处理方式
图像上采样
cv2.pyrUp(src, dst=None, dstsize=None, borderType=None)
形态学
构造结构元素(核)
cv2.getStructuringElement(shape, ksize[, anchor]) → retval
- size:核的形状。可以选择三种
- 矩形:MORPH_RECT;
- 交叉形:MORPH_CROSS;
- 椭圆形:MORPH_ELLIPSE;
- ksize:核的尺寸
- anchor:元素内的锚点位置。默认值 (-1,-1)表示锚点位于中心。注意,只有十字形的形状取决于锚位置。在其他情况下,锚点仅调节形态运算结果偏移了多少。
腐蚀
cv2.erode(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) → dst¶
- 消除噪声,分割(isolate)独立的图像元素,以及连接(join)相邻的元素,寻找图像中的明显的极大值区域或极小值区域。
- src:输入的图片
- kernel:结构元素(核)
- dst:输出与src大小和类型相同的图像
- iteration:迭代的次数
- anchor:锚点在元素内的位置;默认值(-1, -1)表示锚点位于元素中心。
膨胀
cv2.dilate(src, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) → dst¶
- 消除噪声,分割(isolate)独立的图像元素,以及连接(join)相邻的元素,寻找图像中的明显的极大值区域或极小值区域。
高级形态转换
cv2.morphologyEx(src, op, kernel[, dst[, anchor[, iterations[, borderType[, borderValue]]]]]) → dst
- src:输入的图片,
- op:进行变化的方式
- cv2.MORPH_OPEN:开运算,先进行腐蚀操作,再进行膨胀操作,消除小白点
- cv2.MORPH_CLOSE:关运算,先进行膨胀操作,再进行腐蚀操作,消除小黑点
- cv2.MORPH_GRADIENT:形态学梯度,膨胀图减去腐蚀图,得到图片的轮廓
- cv2.MORPH_TOPHAT:顶帽,原图减去开运算后的图,原始图片的白点
- cv2.MORPH_BLACKHAT: 黑帽,闭运算减去原图后的图,原始图片的黑点
- kernel:结构元素(核)
- iterations:迭代次数
- borderType :像素外推方法
- borderValue :边框不变时的边框值
图像滤波
均值滤波
blur(src, ksize[, dst[, anchor[, borderType]]]) → dst
- img:原图像
- ksize:核大小
中值滤波
cv2.medianBlur(src, ksize[, dst]) → dst
- img:原图像
- ksize:核大小
高斯滤波
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) → dst
- img:原图像
- ksize:核大小
双边滤波
cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[, dst[, borderType]]) → dst
- src:输入图像
- d:过滤时周围每个像素领域的直径
- sigmaColor:在color space中过滤sigma。参数越大,临近像素将会在越远的地方mix。
- sigmaSpace:在coordinate space中过滤sigma。参数越大,那些颜色足够相近的的颜色的影响越大。
颜色空间转换
RGB
RGB是从颜色发光的原理来设计定的,通俗点说它的颜色混合方式就好像有红、绿、蓝三盏灯,当它们的光相互叠合的时候,色彩相混,而亮度却等于两者亮度之总和,越混合亮度越高,即加法混合。
HSV
HSV是一种比较直观的颜色模型,所以在许多图像编辑工具中应用比较广泛,这个模型中颜色的参数分别是:色调(H, Hue),饱和度(S,Saturation),明度(V, Value)。
-
色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
-
饱和度S:饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
-
明度V:明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
Lab
一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。
- L:用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;
- a:从红色到绿色的范围,取值范围是[127,-128];
- b:从黄色到蓝色的范围,取值范围是[127,-128]。
Grayscale
灰阶图像就是黑白图像,通过调节灰度值来显示影像
图像二值化
固定阈值二值化
cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
-
src:输入图片 (single-channel, 8-bit or 32-bit floating point).
-
thresh:表示的是阈值(起始值)
-
maxval:在二元阈值THRESH_BINARY和逆二元阈值THRESH_BINARY_INV中使用的最大值
-
type:表示的是这里划分的时候使用的是什么类型的算法
-
THRE SH_BINARY
<img src="openCV基本操作.assets/image-20200409151821364.png" alt="image-20200409151821364" style="zoom:50%;" />
-
THRE SH_BINARY_INV
<img src="openCV基本操作.assets/image-20200409151849539.png" alt="image-20200409151849539" style="zoom:50%;" />
-
THRE SH_TRUNC
<img src="openCV基本操作.assets/image-20200409151904889.png" alt="image-20200409151904889" style="zoom:50%;" />
-
THRE SH_TOZERO
<img src="openCV基本操作.assets/image-20200409151917045.png" alt="image-20200409151917045" style="zoom:50%;" />
-
THRE SH_TOZERO_INV
<img src="openCV基本操作.assets/image-20200409151937495.png" alt="image-20200409151937495" style="zoom:50%;" />
-
-
自动获取阈值(基于直方图的二值化):特殊值THRESH_OTSU可以与以上值之一通过 ‘|’ 组合。在这种情况下,通过Otsu’s算法确定最佳阈值值,并使用它,而不是指定的阈值。目前,Otsu的方法仅适用于8位图像。
自适应阈值二值化
cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C[, dst]) → dst
- src: 输入图,只能输入单通道8位图像
- maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- thresh_type: 阈值的计算方法,包含以下2种类型:
- cv2.ADAPTIVE_THRESH_MEAN_C:阈值取自相邻区域的平均值
- cv2.ADAPTIVE_THRESH_GAUSSIAN_C:阈值取自相邻区域的加权和,权重为一个高斯窗口
- type:二值化操作的类型,与固定阈值函数相同,包含以下5种类型:
- cv2.THRESH_BINARY;
- cv2.THRESH_BINARY_INV;
- cv2.THRESH_TRUNC;
- cv2.THRESH_TOZERO;
- cv2.THRESH_TOZERO_INV.
- Block Size: 邻域大小(用来计算阈值的区域大小)
- C :阈值计算方法中的常数项,阈值等于平均值或加权平均值减去这个常数
图像梯度
Laplacian
cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst
- src:输入图像不用解释了;
- ddepth:图像的深度(数据类型),-1表示采用的是与原图像相同的深度。可以使用cv2.CV_64F等,因为有方向,所以要比原图大
- ksize:算子的大小,必须为1、3、5、7。默认为1。
- scale:缩放导数的比例常数,默认情况下没有伸缩系数;
- delta:是一个可选的增量,将会加到最终的dst中,同样,默认情况下没有额外的值加到dst中;
- borderType:是判断图像边界的模式。这个参数默认值为cv2.BORDER_DEFAULT。
Sobel
cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst
- dx和dy表示的是求导的阶数,0表示这个方向上没有求导,一般为0、1、2
CANNY边缘检测
- 噪声去除
- 计算图像梯度
- 非极大值抑制
- 滞后阈值
cv2.Canny(image, threshold1, threshold2[, edges[, apertureSize[, L2gradient ]]])
- image:源图像,必须为单通道的灰度图
- threshold1:阈值minVal
- threshold2:阈值maxVal
- apertureSize:用于计算图片提取的 Sobel kernel 尺寸
- L2gradient:指定计算梯度的等式
视频操作
摄像头读取
cv2.VideoCapture() → <VideoCapture object>
cv2.VideoCapture(filename) → <VideoCapture object>
cv2.VideoCapture(device) → <VideoCapture object>
- filename:打开的视频文件(例如video.avi)或图像序列的名称(例如img_%02d.jpg,它将读取img_00.jpg,img_01.jpg,img_02.jpg等示例)
- device:打开的视频捕获设备的ID(即摄像机索引)。如果连接了单个摄像机,则只需传递0。
读取帧
cv2.VideoCapture.read([image]) → retval, image
- retval:布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False
- image:读取到的图像
初始化成功判断
cv2.VideoCapture.isOpened() → retval
- retval:如果先前对VideoCapture构造函数或cv2.VideoCapture.open调用成功,则返回true。
关闭视频文件或捕获设备
cv2.VideoCapture.release() → None
关闭所有窗口
cv2.destroyAllWindows()
延时等待键盘输入
cv2.waitKey([delay]) → retval
- delay:等待时间,单位为毫秒,当为0是,代表永远
- 常用方法:if cv2.waitKey(1) & 0xFF == ord('q'): break
获取摄像头属性
cv2.VideoCapture.get(propId) → retval
- propId:属性标识符
- cv2.CAP_PROP_POS_MSEC:视频文件的当前位置,以毫秒为单位或视频捕获时间戳。
- cv2.CAP_PROP_POS_FRAMES:基于0的下一个要解码/捕获的帧的索引。
- cv2.CAP_PROP_POS_AVI_RATIO:视频文件的相对位置:0-电影的开始,1-电影的结束。
- cv2.CAP_PROP_FRAME_WIDTH:视频流中帧的宽度。
- cv2.CAP_PROP_FRAME_HEIGHT:视频流中帧的高度。
- cv2.CAP_PROP_FPS:帧频。
- cv2.CAP_PROP_FOURCC:编解码器的4个字符的代码。
- cv2.CAP_PROP_FRAME_COUNT:视频文件中的帧数。
- cv2.CAP_PROP_FORMAT resolve ():返回的Mat对象的格式。
- cv2.CAP_PROP_MODE:特定于后端的值,指示当前的捕获模式。
- cv2.CAP_PROP_BRIGHTNESS:图像的亮度(仅适用于相机)。
- cv2.CAP_PROP_CONTRAST:图像的对比度(仅适用于相机)。
- cv2.CAP_PROP_SATURATION:图像的饱和度(仅适用于相机)。
- cv2.CAP_PROP_HUE:图像的色相(仅适用于相机)。
- cv2.CAP_PROP_GAIN:图像的增益(仅适用于相机)。
- cv2.CAP_PROP_EXPOSURE:曝光(仅适用于相机)。
- cv2.CAP_PROP_CONVERT_RGB:布尔型标志,指示是否应将图像转换为RGB。
- CV_CAP_PROP_WHITE_BALANCE_U:白平衡设置的U值(注意:当前仅由DC1394 v 2.x后端支持)
- CV_CAP_PROP_WHITE_BALANCE_V:白平衡设置的V值(注意:当前仅受DC1394 v 2.x后端支持)
- CV_CAP_PROP_RECTIFICATION:立体摄像机的纠正标志(注意:当前仅受DC1394 v 2.x后端支持)
- CV_CAP_PROP_ISO_SPEED:摄像机的ISO速度(注意:当前仅受DC1394 v 2.x后端支持)
- CV_CAP_PROP_BUFFERSIZE:存储在内部缓冲存储器中的帧数(注意:当前仅受DC1394 v 2.x后端支持)
设置摄像头属性
cv2.VideoCapture.set(propId, value) → retval
视频写入
cv2.VideoWriter([filename, fourcc, fps, frameSize[, isColor]]) → <VideoWriter object>
- filename:输出文件名.
- fourcc:4个部分用来选择视频编码格式。例如:, CV_FOURCC('P','I','M','1') 是MPEG-1 编解码器, CV_FOURCC('M','J','P','G') 是jpeg编解码器等。
- fps:输出视频的帧率.
- frameSize:视频帧的大小.
- isColor:如果不为零,则编码器将期望并编码彩色框架,否则它将与灰度框架一起使用(仅Windows当前支持该标志)
想要认识更多深度学习小伙伴,交流更多技术问题,欢迎关注公众号“极链AI云”(为你提供性价比最高的共享算力平台,官网地址:https://cloud.videojj.com/)
更多推荐



所有评论(0)