前言:Hello大家好,我是小哥谈。计算机视觉的基础首先是处理图像、视频这些非结构化的数据,而图像处理库比较常用和强大的有PIL、OpenCV模块,本节课主要讲述 OpenCV常用的方法及使用说明。 🌈
目录
🚀一、基本操作
🚀二、绘图
🚀三、阈值处理
🚀四、几何变换
🚀五、图像运算
🚀六、平滑处理
🚀七、形态学处理
🚀八、轮廓检测
🚀九、边缘检测
🚀十、摄像头操作
🚀十一、视频文件操作
🚀一、基本操作
1.读取图像
image = cv2.imread(filename, flags)
参数说明:
image:是imread()方法的返回值,返回的是读取到的图像。
filename:要读取的图像的完整文件名。例如,要读取当前项目目录下的1.jpg,filename的值为"1.jpg"(双引号是英文格式的)。
flags:读取图像颜色类型的标记。当flags的默认值为1时,表示读取的是彩色图像,此时的flags值可以省略;当flags的值0时,表示读取的是灰度图像(如果读取的是彩色图像,也将转换为与彩色图像对应的灰度图像)
2.显示图像
cv2.imshow(winname, mat)
参数说明:
winname:显示图像的窗口名称
mat:要显示的图像
说明:♨️♨️♨️
与imshow()方法结合使用的还有waitKey()、destroyAllWindows()方法,即:
cv2.waitKey()
cv2.destroyAllWindows()
waitKey()方法用于等待用户按下键盘上按键的时间。当用户按下键盘上的任意按键时,将执行waitKey()方法方法,并且获取waitKey()方法的返回值。
destroyAllWindows()方法用于销毁所有正在显示图像的窗口。
3.保存图像
cv2.imwrite(filename, img)
参数说明:
filename:保存图像时所用的完整路径
img:要保存的图像
🚀二、绘图
1.线段的绘制
img = cv2.line(img,pt1,pt2,color,thickness)
参数说明:
img:画布
pt1:线段的起点坐标
pt2:线段的终点坐标
color:绘制线段时的线条颜色
thickness:绘制线段的线条宽度
2.矩形的绘制
img = cv2.retangle(img,pt1,pt2,color,thickness)
参数说明:
img:画布
pt1:矩形的左上角坐标
pt2:矩形的右下角坐标
color:绘制矩形时的线条颜色
thickness:绘制矩形时的线条宽度
3.圆形的绘制
img = cv2.circle(img,center,radius,color,thickness)
参数说明:
img:画布
center:圆形的圆心坐标
radius:圆形的半径
color:绘制圆形时的线条颜色
thickness:绘制圆形时的线条宽度
4.多边形的绘制
img = cv2.polylines(img,pts,isClosed,color,thickness)
参数说明:
img:画布
pts:由多边形各个顶点的坐标组成的一个列表,这个列表是一个Numpy的数组类型。
isClosed:如果值为True,表示一个闭合的多边形;如果值为False,表示一个不闭合的多边形。
color:绘制多边形时的线条颜色
thickness:绘制多边形时的线条宽度
5.文字的绘制
img = cv2.putText(img,text,org,fontFace,fontScale,color,thickness,lineType,bottomLeftOrigin)
参数说明:
img:画布
text:要绘制的文字内容
org:文字在画布中的左下角坐标
fontFace:字体样式
fontScale:字体大小
color:绘制文字时的线条颜色
thickness:绘制文字时的线条宽度
lineType:线型(指的是线的产生算法,有4和8两个值,默认值为8)
bottomLeftOrigin:绘制文字时的方向(有True和False两个值,默认值为False)
🚀三、阈值处理
1.阈值处理
retval, dst = cv2.threshold(src, thresh, maxval, type)
参数说明:
src:被处理的图像,可以是多通道图像。
thresh:阈值,阈值在125~150范围内取值的效果最好。
maxval:阈值处理采用的最大值
type:阈值处理类型
返回值说明:
retval:处理时所采用的阈值
dst:经过阈值处理后的图像
2.自适应阈值
dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
参数说明:
src:被处理的图像。需要注意的是,该图像须是灰度图像。
maxValue:阈值处理采用的最大值
adaptiveMethod:自适应阈值的计算方法
thresholdType:阈值处理类型
blockSize:一个正方形区域的大小。例如,5指的是5×5的区域。
C:常量。阈值等于均值或者加权值减去这个常量。
返回值说明:
dst:经过阈值处理后的图像
🚀四、几何变换
1.缩放
dst = cv2.resize(src, dsize, fx, fy, interpolation)
参数说明:
src:原始图像
dsize:输出图像的大小,格式为(宽,高),单位为像素。
fx:可选参数。水平方向的缩放比例。
fy:可选参数。垂直方向的缩放比例。
interpolation:可选参数。缩放的插值方式,建议使用默认值。
返回值说明:
dst:缩放之后的图像
2.翻转
dst = cv2.flip(src, flipCode)
参数说明:
src:原始图像
flipCode:翻转类型
返回值说明:
dst:翻转之后的图像
3.仿射
dst = cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)
参数说明:
src:原始图像
M:一个2行3列的矩阵,根据此矩阵的值变换原图中的像素位置。
dsize:输出图像的尺寸大小
flags:可选参数,插值方式,建议使用默认值。
borderMode:可选参数,边界类型,建议使用默认值。
borderValue:可选参数,边界值,默认为0,建议使用默认值。
返回值说明:
dst:经过仿射变换后输出图像
4.透视
dst = cv2.warpPerspective(src, M, dsize, flags, borderMode, borderValue)
参数说明:
src:原始图像
M:一个3行3列的矩阵,根据此矩阵的值变换原图中的像素位置。
dsize:输出图像的尺寸大小
flags:可选参数,插值方式,建议使用默认值。
borderMode:可选参数,边界类型,建议使用默认值。
boderValue:可选参数,边界值,默认为0,建议使用默认值。
🚀五、图像运算
1.图像加运算
dst = cv2.add(src1, src2, mask, dtype)
参数说明:
src1:第一幅图像
src2:第二幅图像
mask:可选参数,掩模,建议使用默认值。
dtype:可选参数,图像深度,建议使用默认值。
返回值说明:
dst:相加之后的结果图像。如果相加之后的值大于255,则取255。
2.图像与运算
dst = cv2.bitwise_and(src1, src2, mask)
参数说明:
src1:第一幅图像
src2:第二幅图像
mask:可选参数,掩模。
返回值说明:
dst:与运算之后的结果图像
3.图像或运算
dst = cv2.bitwise_or(src1, src2, mask)
参数说明:
src1:第一幅图像
src2:第二幅图像
mask:可选参数,掩模。
返回值说明:
dst:或运算之后的结果图像
4.图像加权和运算
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)
参数说明:
src1:第一幅图像
alpha:第一幅图像的权重
src2:第二幅图像
beta:第二幅图像的权重
gamma:在和结果上添加的标量。该值越大,结果图像越亮,相反则越暗。可以是负数。
返回值说明:
dst:叠加之后的图像
🚀六、平滑处理
1.均值滤波
dst = cv2.blur(src, ksize, anchor, borderType)
参数说明:
src:被处理的图像
ksize:滤波核大小,其格式为(高度,宽度),建议使用如(3,3)、(5,5)、(7,7)等宽高相等的奇数边长。滤波核越大,处理之后的图像越模糊。
anchor:可选参数,滤波核的锚点,建议采用默认值,方法可以自动计算锚点。
borderType:可选参数,边界样式,建议采用默认值。
返回值说明:
dst:经过均值滤波处理之后的图像。
2.中值滤波
dst = cv2.medianBlur(src, ksize)
参数说明:
src:被处理的图像
ksize:滤波核的边长,必须是大于1的奇数,例如3、5、7等。方法会根据此边长自动创建一个正方形的滤波核。
返回值说明:
dst:经过中值滤波处理之后的图像。
3.高斯滤波
dst = cv2.GaussianBlur(src, ksize, sigmaX, sigmaY, borderType)
参数说明:
src:被处理的图像
ksize:滤波核的大小,宽、高必须是奇数,例如(3,3)、(5,5)等。
sigmaX:卷积核水平方向的标准差
sigmaY:卷积核垂直方向的标准差。修改sigmaX或sigmaY的值都可以改变卷积核中的权重比例。如果不知道如何设计这两个参数值,就直接把这两个参数的值写成0,方法就会根据滤波核的大小自动计算出合适的权重比例。
borderType:可选参数,边界样式,建议使用默认值。
返回值说明:
dst:经过高斯滤波处理之后的图像
4.双边滤波
dst = cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)
参数说明:
src:被处理的图像
d:以当前像素为中心的整个滤波区域的直径。如果是d<0,则自动根据sigmaSpace参数计算得到。该值与保留的边缘信息数量成正比,与方法运行效率成反比。
sigmaColor:参数计算的颜色范围,这个值是像素颜色值与周围颜色值的最大差值,只有颜色值之差小于这个值时,周围的像素才会进行滤波计算。值为255时,表示所有颜色都参与计算。
sigmaSpace:坐标空间的sigma值,该值越大,参与计算的像素数量就越多。
borderType:可选参数,边界样式,建议默认。
返回值说明;
dst:经过双边滤波处理之后的图像
🚀七、形态学处理
1.腐蚀
dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
参数说明:
src:原始图像
kernel:腐蚀使用的核
anchor:可选参数,核的锚点位置。
iterations:可选参数,腐蚀操作的迭代次数,默认值为1。
borderType:可选参数,边界样式,建议默认。
borderValue:可选参数,边界值,建议默认。
返回值说明:
dst:经过腐蚀之后的图像
2.膨胀
dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
参数说明:
src:原始图像
kernel:膨胀使用的核
anchor:可选参数,核的锚点位置。
iterations:可选参数,腐蚀操作的迭代次数,默认值为1。
borderType:可选参数,边界样式,建议默认。
borderValue:可选参数,边界值,建议默认。
返回值说明:
dst:经过膨胀之后的图像
3.形态学运算
dst = cv2.morphologyEx(src, op, kernel, anchor, iterations, borderType, borderValue)
参数说明:
src:原始图像
op:操作类型
kernel:操作过程中所使用的核
anchor:可选参数,核的锚点位置。
iterations:可选参数,迭代次数,默认值为1。
borderType:可选参数,边界样式,建议默认。
borderValue:可选参数,边界值,建议默认。
返回值说明:
dst:操作之后得到的图像
🚀八、轮廓检测
1.检测轮廓
contours, hierarchy = cv2.findContours(image, mode, methode)
参数说明:
image:被检测的图像,必须是8位单通道二值图像。如果原始图像是彩色图像,必须转为灰度图像,并经过二值化阈值处理。
mode:轮廓的检索模式。
methode:检测轮廓时使用的方法。
返回值说明:
contours:检测出的所有轮廓,list类型,每一个元素都是某个轮廓的像素坐标数组。
hierarchy:轮廓之间的层次关系
2.绘制轮廓
image = cv2.drawContours(image, contours, contourIdx, color, thickness, lineTypee,
hierarchy, maxLevel, offse)
参数说明:
image:被绘制轮廓的原始图像,可以是多通道图像。
contours:findContours()方法得出的轮廓列表
contourIdx:绘制轮廓的索引,如果为-1则绘制所有轮廓。
color:绘制颜色,使用BGR样式。
thickness:可选参数,画笔的粗细程度,如果该值为-1则绘制实心轮廓。
lineType:可选参数,绘制轮廓的线型。
hierarchy:可选参数,findContours()方法得出的层次关系。
maxLevel:可选参数,绘制轮廓的层次深度,最深绘制第maxLevel层。
offse:可选参数,偏移量,可以改变绘制结果的位置。
返回值说明:
image:同参数中的image,方法执行后原始图像中就包含绘制的轮廓了,可以不使用此返回值保存结果。
3.最小矩形包围框
retval = cv2.boundingRect (array)
参数说明:
array:轮廓数组
返回值说明:
retval:元组类型,包含四个整数值,分别是最小矩形包围框左上角顶点的横坐标、左上角顶点的纵坐标、矩形的宽和矩形的高。所以也可以写成x,y,w,h = cv2.boundingRect(array)的形式。
4.最小圆形包围框
center, radius = cv2.minEnclosingCircle(points)
参数说明:
points:轮廓数组
返回值说明:
center:元组类型,包含两个浮点值,是最小圆形包围框圆心的横坐标和纵坐标。
radius:浮点类型,最小圆形包围框的半径。
🚀九、边缘检测
1.Canny边缘检测
edges = cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)
参数说明:
image:检测的原始图像
threshold1:计算过程中使用的第一个阈值,可以是最小阈值,也可以是最大阈值,通常用来设置最小阈值。
threshold2:计算过程中使用的第二个阈值,通常用来设置最大阈值。
apertureSize:可选参数,Sobel算子的孔径大小。
L2gradient:可选参数,计算图像梯度的标识,默认值为False。值为True时会采用更精准的算法进行计算。
返回值说明:
edges:计算后得出的边缘图像,是一个二值灰度图像。
🚀十、摄像头操作
1.获取摄像头
capture = cv2.VideoCapture(index)
参数说明:
capture:要打开的摄像头
index:摄像头的设备索引
2.检验摄像头初始化是否成功
retval = cv2.VideoCapture.isOpened()
参数说明:
retval:isOpened()方法的返回值。如果摄像头初始化成功,retval的值为True;否则,retval的值为False。
3.读取一帧
retval, image = cv2.VideoCapture.read()
参数说明:
retval:是否读取到帧。如果读取到帧,retval的值为True;否则,retval的值为False。
image:读取到的帧。因为帧指的是构成视频的图像,所以可以把“读取到的帧”理解为“读取到的图像”。
4.释放摄像头
cv2.VideoCapture.release()
🚀十一、视频文件操作
1.读取视频文件
video = cv2.VideoCapture(filename)
参数说明:
video:要打开的视频
filename:打开视频的文件名。例如,产品宣传.avi等。
2.获取视频文件的属性
retval = cv2.VideoCapture.get(propId)
参数说明:
retval:获取到与propId对应的属性值
propId:视频文件的属性值
3.创建视频输出流,保存视频文件
<VideoWriter object> = cv2.VideoWriter(filename, fourcc, fps, frameSize)
参数说明:
VideoWriter object:VideoWriter类对象
filename:保存视频时的路径(含有文件名)
fourcc:用4个字符表示的视频编码格式
fps:帧速率
frameSize:每一帧的大小
4.保存视频文件(简写方式)
cv2.VideoWriter.write(frame)
参数说明:
frame:读取到的帧
5.释放视频输出流文章来源:https://www.toymoban.com/news/detail-678869.html
cv2.VideoWriter.release()
文章来源地址https://www.toymoban.com/news/detail-678869.html
到了这里,关于史上最全OpenCV常用方法及使用说明汇总,建议收藏!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!