https://blog.csdn.net/weixin_42533541/article/details/85275035 让pip对应不同的python

image-20210612232213257.png

图像显示 imshow

image-20210612232707804.png

图像保存 imwrite

image-20210612232912463.png

视频处理 VideoCapture

image-20210612233559085.png

  1. vc.release() #释放硬件资源

截取部分图像数据

  1. img = cv2.imread("图片")
  2. xx = img[0:200,0:200]
  3. cv_show("xx",xx)

颜色通道提取 split

  1. b,g,r = cv2.split(img) #bgr三通道的矩阵数组
  2. 中间一系列的对图像操作,在把三通道写回去
  3. img = cv2.merge(b,g,r)
  4. python CV2shaperesize返回值和参数的区别
  5. 1、在一副图像中使用shape得到一个3个类别的列表
  6. shape[0] =图像的高
  7. shape[1] =图像的宽
  8. shape[2] = 图像的图像通道数量
  9. 2、在对一幅图像进行缩放时
  10. resize(img, (w, h))中w表示宽度,h表示高度,正好与shape[0]和shape[1]相反
  11. 3、如果在resize中要对图像等比例放大或者缩小,注意制定的宽和高需要转换为整数

image-20210613001313079.png

边界填充

image-20210613001707514.png
image-20210613001722162.png

对于subplot函数的理解 看连接 https://www.cnblogs.com/lyxblogs/p/13259753.html

图像计算

image-20210613020400938.pngimage-20210613020545896.png

resize

image-20210613021129074.png
image-20210613021216405.png

图像融合 addWeighted

image-20210613021758961.png

图像阈值 threshold

image-20210613022207793.png

图像平滑

image-20210613023412799.pngimage-20210613024000737.pngimage-20210613024343428.png

image-20210613024654939.png

腐蚀操作 erode

image-20210613025623942.png image-20210613025556685.png

image-20210613025400282.png

膨胀操作 dilate

image-20210613025832074.png
image-20210613025852874.png

开运算 闭运算 morphologyEx

image-20210613030148604.png

梯度计算 morphologyEx

image-20210613030538531.png
image-20210613065104181.png

图像梯度 Sobel算子

计算时,小于0 默认都变成0

image-20210613031350224.pngimage-20210613031629611.pngimage-20210613031856173.pngimage-20210613032401176.png

不做绝对值 做绝对值
image-20210613032546861.png image-20210613032605674.png
分别计算X,Y,求和 一起计算X,Y,求和
image-20210613032655174.png image-20210613032705969.png

image-20210613040036931.png

image-20210613040133711.png

Canny 边缘检测

  1. 1)使用高斯滤波器,以平滑图像,滤除噪声。
  2. 2)计算图像中每个像素点的梯度强度和方向。
  3. 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
  4. 4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
  5. 5)通过抑制孤立的弱边缘最终完成边缘检测。

image-20210613061011848.png
image-20210613061048883.png
image-20210613061119121.png
image-20210613061747499.png
image-20210613062009967.pngimage-20210613062312545.png

图像金字塔 pryUp pryDown

image-20210613063217333.pngimage-20210613063233318.pngimage-20210613063502226.png

拉普拉斯金字塔 得出图片类似轮廓

image-20210613064045896.png

image-20210613064157976.png

图像轮廓 findContours

image-20210613064305898.png
image-20210613064425636.png
image-20210613065549217.png

image-20210613065645246.png
image-20210613065549217.png

轮廓近似 approxPolyDP

image-20210613070803983.png
image-20210613070939927.pngimage-20210613071021373.png

模版匹配

image-20210613071852440.pngimage-20210613072325532.pngimage-20210613073030520.png

  1. ·TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
  2. .TM_cCORR:计算相关性,计算出来的值越大,越相关
  3. ·TM_cCOEFF:计算相关系数,计算出来的值越大,越相关
  4. .TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关
  5. ·TM_CCORR_NORMED:计算归—化相关性,计算出来的值越接近1,越相关
  6. .TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关

直方图 calcHist ravel函数

image-20210613182549652.png

  1. img = cv2.imread("xxx.jpg",0)
  2. hist = cv2.calcHist([img],[0],None,[256],[0,256])
  3. hist.shape
  4. plt.hist(img.ravel(),256)
  5. plt.show()

numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:
ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维

另外,reshape(-1)也可以“拉平”多维数组

image-20210613185831740.png

mask 操作

image-20210613190343525.png

image-20210613190422380.png

直方图均衡化 equalizeHist

image-20210613190616077.png

算法

image-20210613190944933.png

  1. img = cv2.imread("xxx.jpg",0)
  2. plt.hist(img.ravel(),256)
  3. plt.show()
  4. equ = cv2.equalizeHist(img)
  5. plt.hist(equ.ravel(),256)
  6. plt.show()
  7. res = np.hstack((img,equ))
  8. cv2.show("dd",res)

自适应直方图均衡化 createCLAHE

  1. 概述:(8,8),就是一张图上面分很多个8x8的小格子,小格子里面进行均衡化
  1. img = cv2.imread("123.jpg",0)
  2. equ = cv2.equalizeHist(img)
  3. res = np.hstack((img,equ))
  4. clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
  5. res_clahe = clahe.apply(img)
  6. res = np.hstack((img,equ,res_clahe))
  7. cv2.imshow("ww",res)
  8. cv2.waitKey(0)

傅里叶变换 dft idft

https://zhuanlan.zhihu.com/p/19763358

image-20210613193554663.png

代码

image-20210613194644962.png
image-20210613194902252.pngimage-20210613194957128.pngimage-20210613195145124.png

低频过滤效果 模糊

image-20210613195257363.png

高频

image-20210613195326650.png

image-20210613195337021.png

蛮力匹配(Brute-Force)BFMatcher()

  1. # 第一步:构造sift,求解出特征点和sift特征向量
  2. # detectAndCompute 就是detect和compute
  3. sift = cv2.SIFT_create()
  4. kp1, des1 = sift.detectAndCompute(img1, None)
  5. kp2, des2 = sift.detectAndCompute(img2, None)

image.png
如果想要更快速的完成操作,用cv2.FlannBasedMarcher

RANSAC

image.png