发布时间:2023-04-20 文章分类:电脑百科 投稿人:赵颖 字号: 默认 | | 超大 打印

目录

1.图像的输入、显示和保存、窗口的创建与关闭 

1.1 图像的输入

1.2 图像的显示

1.3 图像的保存

1.4 创建与关闭窗口 

2.绘制几何图形

2.1 绘制直线

2.2 绘制圆形

2.3 绘制矩形

2.4 向图像中添加文字

3.图像反转与复制

3.1 翻转图像

3.2 复制图像

4.获取图像的属性

5.获取并修改图像中的像素点

6.图像颜色通道的拆分与合并

6.1 将图片img拆分为三个颜色通道:

6.2 将三个颜色通道合并为一张图片:

 7.色彩空间转换

 7.1 BGR↔Gray

7.2 BGR↔HSV

8.图像的加法与混合

8.1 图像的相加

8.2 图像的混合

 9. 图像的运算

9.1 加、减、乘、除

9.2 均值、均值和方差

9.3 与、或、非、异或 运算

10.图像的缩放,平移与旋转

10.1 缩放 cv2.resize()

10.2 平移 cv2.warpAffine()

10.3 旋转 cv2.getRotationMatrix2D()

11.形态学处理函数

11.1 腐蚀与膨胀

11.2 开操作与闭操作 

11.3 顶帽变换、底帽变换与形态学梯度(边界提取)

12.常见滤波器

12.1 方框滤波

12.2 均值滤波

12.3 高斯滤波

12.4 中值滤波

12.5 双边滤波

13.轮廓检测

13.1 找出图片的轮廓值

13.2 画出图片中的轮廓值,也可以用来画轮廓的近似值

轮廓检测与画图步骤:

13.3 计算轮廓的面积

13.4计算轮廓的周长

计算轮廓的周长和面积步骤:

13.5 外接矩形

13.6 外接圆

画出外接矩形和外接圆步骤:

14.图像金字塔(上采样和下采样)

15.边界填充

16.视频捕获类(VideoCapture类)

16.1 读取视频文件--VideoCapture()

16.2 视频参数获取--VideoCapture.get()  与设置--VideoCapture.set()

 16.3 判断摄像头是否开启 -- VideoCapture.isOpened()

16.4 关闭文件/摄像头(释放)--VideoCapture.release()

16.5 读取该文件/摄像头的下一帧 -- VideoCapture.read()

17.视频读写类(VideoWriter类)

17.1 cv2.VideoWriter()

17.2 write函数--cv2.VideoWriter.write()

18.视频读写实战:

19.图像直方图

19.1 直方图 -- hist = cv2.calcHist(  )

19.2 直方图均衡化

20.模板匹配

21.霍夫变换

21.1 霍夫线检测

21.2 霍夫圆检测

1.图像的输入、显示和保存、窗口的创建与关闭 

关键函数:

1.1 图像的输入

cv.imread()

参数:

       cv.IMREAD*COLOR:以彩色模式加载图像,任何图像的透明度都将被忽略。这是默认参数。 

      cv.IMREAD*GRAYSCALE:以灰度模式加载图像

      cv.IMREAD_UNCHANGED:包括alpha通道的加载图像模式。

   (可以使用1、0或者-1来替代上面三个标志)     

import cv2 as cv #以灰度图的形式读取图像
img = cv.imread('genggui.jpg',0)

1.2 图像的显示

cv.imshow()

参数:

       注意:在调用显示图像的API后,要调用cv.waitKey()给图像绘制留下时间,否则窗口会出现无响应情况,并且图像无法显示出来。

cv.imshow('image',img) #opencv中显示
cv.waitKey(0) #等待窗口

运行结果:

OpenCV函数大全(超级详细版)-python操作

1.3 图像的保存

cv.imwrite()

参数:

cv.imwrite('genggui.png',img)

案例:

import cv2 as cv
img = cv.imread('genggui.jpg',0) #以灰度图的形式读取图像
cv.imshow('image',img) # opencv中显示
cv.waitKey(0)
cv.imwrite('gengguigray.png',img) #保存所生成的灰度图像

1.4 创建与关闭窗口 

创建窗口

cv2.namedWindow(窗口名称, 属性) #创建一个窗口

关闭图像窗口

1.关闭一个由imshow产生的图像窗口

cv2.destroyWindow()

参数:winname,关闭的窗口名字

2.关闭所有由imshow产生的窗口

cv2.destroyAllWindows()

2.绘制几何图形

关键函数:

2.1 绘制直线

cv.line(img,start,end,color,thickness)

参数:

2.2 绘制圆形

cv.circle(img,centerpoint, r, color, thickness)

参数:

2.3 绘制矩形

cv.rectangle(img,leftupper,rightdown,color,thickness)

参数:

2.4 向图像中添加文字

cv.putText(img,text,station, font, fontsize,color,thickness,cv.LINE_AA)

参数:

3.图像反转与复制

3.1 翻转图像

cv2.flip(img,flipcode)  #flipcode控制翻转效果

3.2 复制图像

imgcopy = img.copy()

4.获取图像的属性

图像属性包括高、宽和通道数,像素数,图像数据类型等。 

img.shape  #打印图片的高、宽和通道数
img.size   #打印图片的像素数目(图片大小)
img.dtype  #打印图片的格式(数据类型)

5.获取并修改图像中的像素点

     我们可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝,绿,红值的数组。对于灰度图像,仅返回相应的强度值。使用相同的方法对像素值进行修改。

import cv2 as cv
img = cv.imread('genggui.jpg') 
px = img[100,100] #获取某个像素点的值
blue = img[100,100,0] #仅获取蓝色通道的强度值
img[100,100] = [255,255,255] #修改某个位置的像素值

6.图像颜色通道的拆分与合并

      有时需要在B,G,R通道图像上单独工作。在这种情况下,需要将BGR图像分割为单个通道。或者在其他情况下,可能需要将这些单独的通道合并到BGR图像。 

6.1 将图片img拆分为三个颜色通道:

cv2.split(img)  

6.2 将三个颜色通道合并为一张图片:

cv2.merge(img)

 7.色彩空间转换

      OpenCV中有150多种颜色空间转换方法。最广泛使用的转换方法有两种,BGR↔Gray和BGR↔HSV。

cv.cvtColor(input_image,flag)

参数:

更全的参数:

OpenCV函数大全(超级详细版)-python操作

 7.1 BGR↔Gray

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #BGR转换到GRAY
cv2.imshow("gray", gray)

7.2 BGR↔HSV

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) #BGR转换到HSV
cv2.imshow("hsv", hsv)

8.图像的加法与混合

关键函数:

8.1 图像的相加

cv2.add(src1, src2) #参数为图片1与图片2

8.2 图像的混合

       这其实也是加法,但是不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉。图像混合的计算公式如下: 

g(x) = (1−α)f0(x) + αf1(x)

   通过修改 α 的值(0 → 1),可以实现非常炫酷的混合,落到函数中为两个权重。

cv2.addWeighted(src1, alpha, src2, beta,gamma,dst)

参数:

例子:第一幅图像的权重是0.7,第二幅图像的权重是0.3,使用cv2.addWeighted()函数进行混合   

img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)

 9. 图像的运算

9.1 加、减、乘、除

(加) 

cv2.add(src1, src2) #加

(减)

cv2.subtract(src1, src2) #减

 (乘)

cv2.multiply(src1, src2) #乘

 (除)

cv2.divide(src1, src2)

9.2 均值、均值和方差

均值 

cv2.mean(img) #均值

均值和方差

 M1, dev1 = cv2.meanStdDev(img) #均值和方差

9.3 与、或、非、异或 运算

与运算 

dst = cv2.bitwise_and(src1, src2) #与
cv2.imshow("bitwise_and", dst)

或运算

dst = cv2.bitwise_or(src1, src2) #或
cv2.imshow("bitwise_or", dst)

非运算(非运算就是对图像进行颜色反转)

dst = cv2.bitwise_not(src1, src2) # 非(其实是颜色翻转)
cv2.imshow("bitwise_not", dst)

异或运算

cv2.imshow(“bitwise_not”, dst)
dst = cv2.bitwise_xor(src1, src2)

10.图像的缩放,平移与旋转

10.1 缩放 cv2.resize()

cv2.resize(InputArray src, OutputArray dst, Size dsize,
double fx=0, double fy=0, int interpolation=INTER_LINEAR )

参数:

插值方法:(默认的插值方法为:双线性插值)

OpenCV函数大全(超级详细版)-python操作

10.2 平移 cv2.warpAffine()

cv2.warpAffine(src,M,dsize)

参数:

10.3 旋转 cv2.getRotationMatrix2D()

cv2.getRotationMatrix2D(center, angle, scale)

参数:

返回:M:旋转矩阵

11.形态学处理函数

11.1 腐蚀与膨胀

1.腐蚀

#腐蚀
dst = cv2.erode( src, kernel, anchor, iterations, borderType, borderValue ) 

参数:

2.膨胀

#膨胀
dst = cv2.dilate( src, kernel, anchor, iterations, borderType, borderValue) 

11.2 开操作与闭操作 

先腐蚀再膨胀的操作称为开运算。先膨胀再腐蚀的操作称为闭运算。 

cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel) #开操作
cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel) #闭操作

11.3 顶帽变换、底帽变换与形态学梯度(边界提取)

1.图像减去开运算结果称为顶帽变换(Top-hat)。

cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel) #顶帽运算

2.图像减去闭运算结果称为底帽变换(Bottom-hat)。

cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel) #底帽运算

3.膨胀结果减去腐蚀结果,可以得到图像中物体的边界,是一种提取目标物体边缘的算法。

cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel) #形态学梯度

12.常见滤波器

12.1 方框滤波

cv2.boxFilter( src, dst,ddepth, ksize, Point anchor = Point(-1,-1),
                bool normalize = true,borderType = BORDER_DEFAULT )

参数:

12.2 均值滤波

cv2.blur(src, dst, ksize, Point anchor = Point(-1,-1),borderType = BORDER_DEFAULT)

12.3 高斯滤波

cv2.GaussianBlur(  src, dst, ksize,sigmaX, sigmaY = 0, borderType = BORDER_DEFAULT )

    若 sigmaY 为零,就将它设为 sigmaX;若 sigmaX 和 sigmaY 都是0,那么就由 ksize.width 和 ksize.height 计算出来.

12.4 中值滤波

medianBlur(InputArray src,OutputArray dst,int ksize)

12.5 双边滤波

bilateralFilter(src, dst, d, double sigmaColor,double sigmaSpace,
                borderType=BORDER_DEFAULT) 

展示图像:

OpenCV函数大全(超级详细版)-python操作  

13.轮廓检测

13.1 找出图片的轮廓值

cv2.findContours(img,mode, method)   # 找出图中的轮廓值,得到的轮廓值都是嵌套格式的

参数:

 RETR_EXTERNAL:只检索最外面的轮廓。
 RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中。
 RETR_CCOMP:检索所有的轮廓,并肩他们组织为两层:顶层为各部分外部边界,第二层是空洞的边界。
 RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次。

  CHAIN_APPROX_NONE : 以Freeman链码的方式输出轮廓,所有其它方法输出多边形。

  CHAIN_APPROX_SIMPLE : 压缩水平的、垂直的和斜着的部分,也就是函数只保留他们终点部分。

13.2 画出图片中的轮廓值,也可以用来画轮廓的近似值

cv2.drawCountours(img, contours, -1, (0, 0, 255), 2) # 画出图片中的轮廓值,也可以用来画轮廓的近似值

参数:

轮廓检测与画图步骤:

    第一步:载入图片

     第二步:使用cv2.cvtcolor() 将图片转换为灰度图

     第三步:  使用cv2.threshold将图片做二值化转换

     第四步: 使用cv2.findContours 找出图片的轮廓值

     第五步:使用cv2.drawContours在图片上画上轮廓

     第六步:   使用cv2.imshow 完成画图操作

13.3 计算轮廓的面积

cv2.contourArea(cnt, True)  # 计算轮廓的面积

参数说明:cnt为输入的单个轮廓值

13.4计算轮廓的周长

cv2.arcLength(cnt, True)   #  计算轮廓的周长

参数说明:cnt为输入的单个轮廓值

计算轮廓的周长和面积步骤:

使用cv2.findCountor获得的轮廓contours是一个嵌套的类型,即我们可以通过cnt = contours获得第一个物体的轮廓值

第一步:载入图片,做灰度值和二值化处理,并使用cv2.findCountor找出轮廓值,使用cv2.drawCountors画出第一个图像的轮廓

第二步:通过索引取出第一个轮廓值cnt,使用cv2.ContourArea()计算轮廓的面积

第三步:使用cv2.arcLength 获得轮廓的周长

13.5 外接矩形

使用cv2.boudingrect(cnt)获得轮廓的外接矩形,接着使用cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)画出矩阵的轮廓。 

1.获得外接矩形位置信息: 

x, y, w, h = cv2.boudingrect(cnt) # 获得外接矩形

参数说明:x,y, w, h 分别表示外接矩形的x轴和y轴的坐标,以及矩形的宽和高, cnt表示输入的轮廓值。

2.根据坐标在图像上画出矩阵的轮廓

cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)  # 根据坐标在图像上画出矩形

参数说明: img表示传入的图片, (x, y)表示左上角的位置, (x+w, y+h)表示加上右下角的位置,(0, 255, 0)表示颜色,2表示线条的粗细

13.6 外接圆

1.获得外接圆的位置信息

(x, y), radius = cv2.minEnclosingCircle(cnt) # 获得外接圆的位置信息

参数说明: (x, y)表示外接圆的圆心,radius表示外接圆的半径, cnt表示输入的轮廓

2. 根据坐标在图上画出圆

cv2.Cricle(img, center, radius, (0, 255, 0), 2)  # 根据坐标在图上画出圆

参数说明:img表示需要画的图片,center表示圆的中心点,radius表示圆的半径, (0, 255, 0)表示颜色, 2表示线条的粗细

画出外接矩形和外接圆步骤:

外接矩形: 使用cv2.boudingrect(cnt)获得轮廓的外接矩形,使用cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)画出矩阵的轮廓

外接圆: 使用cv2.minEnclosingCircle(cnt)获得轮廓的外接圆,使用cv2.circle(ret, centers, radius, (0, 0, 255), 2)画出圆的轮廓

第一步:载入图片,灰度化,二值化,使用cv2.findCountors找出图像的轮廓,使用轮廓索引获得第一个轮廓cnt

第二步:使用cv2.boundingrect(cnt) ,获得轮廓的x,y,w, h (x, y)表示左上角的坐标,w为宽,h为长

第三步: 使用cv2.rectangle 绘制外接的轮廓

第四步: 使用cv2.minEnclosingCircle(cnt), 获得center和radius,即圆心点的坐标和圆的半径

第五步: 使用cv2.circle(img, center, radius, (0, 0, 255), 2) 绘制圆心的外接轮廓

14.图像金字塔(上采样和下采样)

1. 下采样:图像缩小(先高斯模糊,再降采样,需要一次次重复,不能一次到底)

cv.pyrUP(img) #对图像进行上采样

2. 上采样图像扩大(先扩大,再卷积或者使用拉普拉斯金字塔)

cv.pyrDown(img)#对图像进行下采样

15.边界填充

cv2.copyMakeBorder(img,top, bottom, left, right ,borderType)

参数:

填充方法:

BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法     abcdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充,需要在设置一个value值,已显示填充的颜色。

16.视频捕获类(VideoCapture类)

(可以从视频文件、图像序列和摄像头捕获视频。 OpenCV提供了cv2.VideoCapture类来处理视频。VideoCapture类处理视频的方式非常简单、快捷,而且它既能处理视频文件,又能处理摄像头信息。)

16.1 读取视频文件--VideoCapture()

cv2.VideoCapture (const String &filename, int apiPreference=CAP_ANY)  

参数:   (一般仅填入一个,即文件名。如果填入整数,则打开对应的捕获设备ID。若为0,则打开默认摄像头。)

filename : 打开的视频文件名。                

const String 包括: 视频名 (eg: video.avi)
                             图像序列 (eg: img_%02d.jpg)
                            URL视频流 (eg: protocol://host:port/script_name?script_params|auth)
apiPreference : 当多种capture方式都可以使用时,指定一种方式(CAP_FFMPEG or CAP_IMAGES )   
 例子: cv2.VideoCapture capture("C:/Users/DADA/DATA/gogo.avi");  // 从视频文件读取 

16.2 视频参数获取--VideoCapture.get()  与设置--VideoCapture.set()

cv2.VideoCapture.get()

先读取视频文件:(然后后面可以直接写 video.get() or video.set()

import cv2
# 读取视频文件
video = cv2.VideoCapture('./genggui.mp4')

1.获取视频参数:

# 获取视频参数
param = video.get(CV_CAP_PROP_FRAME_COUNT) # 也可使用以下数字表示参数
'''
cv2.VideoCapture.get(0)		CV_CAP_PROP_POS_MSEC 		视频文件的当前位置,以毫秒为单位
cv2.VideoCapture.get(1)		CV_CAP_PROP_POS_FRAMES 		基于以0开始的被捕获或解码的帧索引
cv2.VideoCapture.get(2)		CV_CAP_PROP_POS_AVI_RATIO 	视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
cv2.VideoCapture.get(3)		CV_CAP_PROP_FRAME_WIDTH 	在视频流的帧的宽度
cv2.VideoCapture.get(4)		CV_CAP_PROP_FRAME_HEIGHT 	在视频流的帧的高度
cv2.VideoCapture.get(5)		CV_CAP_PROP_FPS 			帧速率
cv2.VideoCapture.get(6)		CV_CAP_PROP_FOURCC 			编解码器/fourcc
cv2.VideoCapture.get(7)		CV_CAP_PROP_FRAME_COUNT		帧数
cv2.VideoCapture.get(8)		CV_CAP_PROP_FORMAT 			返回对象的格式
cv2.VideoCapture.get(9)		CV_CAP_PROP_MODE 			返回后端特定的值,该值指示当前捕获模式
cv2.VideoCapture.get(10)	CV_CAP_PROP_BRIGHTNESS 		图像的亮度(仅适用于照相机)
cv2.VideoCapture.get(11)	CV_CAP_PROP_CONTRAST 		图像的对比度(仅适用于照相机)
cv2.VideoCapture.get(12)	CV_CAP_PROP_SATURATION 		图像的饱和度(仅适用于照相机)
cv2.VideoCapture.get(13)	CV_CAP_PROP_HUE 			色调图像(仅适用于照相机)
cv2.VideoCapture.get(14)	CV_CAP_PROP_GAIN 			图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
cv2.VideoCapture.get(15)	CV_CAP_PROP_EXPOSURE 		曝光(仅适用于照相机)
cv2.VideoCapture.get(16)	CV_CAP_PROP_CONVERT_RGB 	指示是否应将图像转换为RGB布尔标志
cv2.VideoCapture.get(17)	CV_CAP_PROP_WHITE_BALANCE 	白平衡,暂时不支持
cv2.VideoCapture.get(18)	CV_CAP_PROP_RECTIFICATION 	立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
'''

2.设置视频参数:

# 设置视频参数
video.set(CV_CAP_PROP_FPS, 30) # 第一个参数为设置的参数名,第二个参数为设定的值
'''
可设置的参数与上述可获取的参数大体一致
'''
# 释放
video.release()

参数与上面大体一致: 

OpenCV函数大全(超级详细版)-python操作

 16.3 判断摄像头是否开启 -- VideoCapture.isOpened()

1.先读取视频 

import cv2
# 读取视频文件
video = cv2.VideoCapture('./test.mp4')	# 参数为视频文件地址,若是数字表示摄像头编号。
'''
参数为字符串,表示输入的视频文件的地址及文件名
参数为数字,表示摄像头编号,默认为-1.即随机选取一个摄像头
'''

2.判断摄像头是否开启

# 判断视频是否是打开状态
 video.isOpened():

参数:无
作用:判断设备/文件是否读取成功,若成功,返回True

16.4 关闭文件/摄像头(释放)--VideoCapture.release()

cv2.VideoCapture.release()

参数:无
作用:关闭文件/摄像头

16.5 读取该文件/摄像头的下一帧 -- VideoCapture.read()

如果正确读取了帧,它将为 True 。因此,你可以通过检 查此返回值来检查视频的结尾。 

cv2.VideoCapture.read()

参数:无
返回值:bool,numpy.array
作用:读取该文件/摄像头的下一帧,成功与否由bool返回值决定,返回的帧矩阵为第二个参数

17.视频读写类(VideoWriter类)

17.1 cv2.VideoWriter()

      OpenCV为cv2.VideoWriter类提供了构造函数,用它来实现初始化工作。该函数的完整定义如下: 

cv2.VideoWriter(filename,fourcc,fps,frameSize[,isColor])

参数:

filename:需要输出保存的视频文件名。如果文件名存在,覆盖原文件。

fourcc:视频的编码类型。在OpenCV中,cv2.VideoWriter_fourcc()函数用来指定视频的编码格式。该函数的参数有4个,这4个字符构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。常用标记如下图:
OpenCV函数大全(超级详细版)-python操作

fps:帧速率,比如录制视频每秒30帧,或者60帧等。

frameSize:帧的长宽

isColor:是否为彩色图像

17.2 write函数--cv2.VideoWriter.write()

cv2.VideoWriter类中还提供了cv2.VideoWriter.write()函数用于写入下一帧视频。其完整定义如下:

cv2.VideoWriter.write(image)

image参数是需要写入的视频帧

18.视频读写实战:

import cv2
# 读取视频文件
video = cv2.VideoCapture('./test.mp4')	# 参数为视频文件地址,若是数字表示摄像头编号。
'''
参数为字符串,表示输入的视频文件的地址及文件名
参数为数字,表示摄像头编号,默认为-1.即随机选取一个摄像头
'''
# 创建写视频器
video_writer = cv2.VideoWriter(filename='./output.mp4', 				# 保存路径文件名
							   apiPreference=cv2.CAP_FFMPEG,			# 后端
							   fourcc=cv2.VideoWriter_fourcc(*'mp4v'),	# 视频编解码器
							   fps=25,									# 视频帧率
							   frameSize=(1920,1080)					# 视频帧尺寸(W, H)
							   isColor=True								# 彩色图像或黑白图像
							   )
'''
apiPreference:cv2.CAP_FFMPEG 或者 cv2.CAP_GSTREAMER,此参数是3.x版本的opencv才有的
fourcc:cv2.VideoWriter_fourcc('M', 'P', '4', 'V') 或 fourcc=cv2.VideoWriter_fourcc(*'mp4v')
		支持类型:MP4V / X264 / I420 / PIMI / XVID / THEO / FLV1
'''							   
# 判断视频是否是打开状态
while video.isOpened():
	# 读取一帧
	ret, frame = video.read() # ret是bool类型,表示是否读取成功;frame为获取的帧图像
	if ret:
		# 写入一帧
		video_writer.write(frame)
		# 播放视频
		cv2.imshow('frame', frame)
		cv2.waitKey(1) # 通过设置等待时间改变播放速度
	else:
		break
# 释放
video.release()
video_writer.release()	# 不释放会无法完成写视频,类似文件写完后的close()

19.图像直方图

19.1 直方图 -- hist = cv2.calcHist(  )

hist = cv2.calcHist( images, channels, mask, histSize, ranges, accumulate )

19.2 直方图均衡化

(统计出来的像素点的值之间的差距比较大,我们需要缩小像各个像素点之间的值得差距,这就叫均衡化。) 

dst = cv2.equalizeHist( src )

 参数:src 是 8 位单通道原始图像,dst 是直方图均衡化处理的结果。

20.模板匹配

result=cv2.matchTemplate( img,template,method)

参数:

1.平方差匹配(CV_TM_SQDIFF):利用模板与图像之间的平方差进行匹配,最好的匹配是0,匹配越差,匹配的值越大。
2.相关匹配(CV_TM_CCORR):利用模板与图像间的乘法进行匹配,数值越大表示匹配程度较高,越小表示匹配效果差。
3.利用相关系数匹配(CV_TM_CCOEFF):利用模板与图像间的相关系数匹配,1表示完美的匹配,-1表示最差的匹配。 

21.霍夫变换

21.1 霍夫线检测

霍夫变换常用来提取图像中的直线和圆等几何图形,霍夫空间中的一条线对应笛卡尔坐标系中一个点,笛卡尔坐标系中两个点,对应霍夫空间一条直线。

cv2.HoughLines(img,rho,theta,threshold)

参数:

21.2 霍夫圆检测

       OpenCV采用霍夫梯度法将霍夫圆检测范围两个阶段,第一阶段检测圆心,第二阶段利用圆心推导出圆圆心检测的原理:圆心是圆周法线的交汇处,设置-一个阈值,在某点的相交的直线的条数大于这个阈值就认为该交汇点为圆心。

       圆半径确定原理:圆心到圆周上的距离(半径)是相同的,确定- 个阈值,只要相同距离的数量大
于该阈值,就认为该距离是该圆心的半径。

circles=cv.HoughCircles(image,method,dp,minDist,param1=100,param2=100,minRadius=0,maxRadius=0)

参数:

这篇课程的学习和总结到这里就结束啦,如果有什么问题可以在评论区留言呀~

如果帮助到大家,可以一键三连+关注支持下~