- 图像显示 imshow
- 图像保存 imwrite
- 视频处理 VideoCapture
- 截取部分图像数据
- 颜色通道提取 split
- 边界填充
- 图像计算
- resize
- 图像融合 addWeighted
- 图像阈值 threshold
- 图像平滑
- 腐蚀操作 erode
- 膨胀操作 dilate
- 开运算 闭运算 morphologyEx
- 梯度计算 morphologyEx
- 图像梯度 Sobel算子
- Canny 边缘检测
- 图像金字塔 pryUp pryDown
- 图像轮廓 findContours
- 模版匹配
- 直方图 calcHist ravel函数
- 直方图均衡化 equalizeHist
- 傅里叶变换 dft idft
- 蛮力匹配(Brute-Force)BFMatcher()
- RANSAC
https://blog.csdn.net/weixin_42533541/article/details/85275035 让pip对应不同的python
图像显示 imshow
图像保存 imwrite
视频处理 VideoCapture
vc.release() #释放硬件资源
截取部分图像数据
img = cv2.imread("图片")
xx = img[0:200,0:200]
cv_show("xx",xx)
颜色通道提取 split
b,g,r = cv2.split(img) #bgr三通道的矩阵数组
中间一系列的对图像操作,在把三通道写回去
img = cv2.merge(b,g,r)
python CV2中shape和resize返回值和参数的区别
1、在一副图像中使用shape得到一个3个类别的列表
shape[0] =图像的高
shape[1] =图像的宽
shape[2] = 图像的图像通道数量
2、在对一幅图像进行缩放时
resize(img, (w, h))中w表示宽度,h表示高度,正好与shape[0]和shape[1]相反
3、如果在resize中要对图像等比例放大或者缩小,注意制定的宽和高需要转换为整数
边界填充
对于subplot函数的理解 看连接 https://www.cnblogs.com/lyxblogs/p/13259753.html
图像计算
resize
图像融合 addWeighted
图像阈值 threshold
图像平滑
腐蚀操作 erode
![]() |
![]() |
膨胀操作 dilate
开运算 闭运算 morphologyEx
梯度计算 morphologyEx
图像梯度 Sobel算子
计算时,小于0 默认都变成0
不做绝对值 | 做绝对值 |
---|---|
![]() |
![]() |
分别计算X,Y,求和 | 一起计算X,Y,求和 |
![]() |
![]() |
Canny 边缘检测
1)使用高斯滤波器,以平滑图像,滤除噪声。
2)计算图像中每个像素点的梯度强度和方向。
3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
5)通过抑制孤立的弱边缘最终完成边缘检测。
图像金字塔 pryUp pryDown
拉普拉斯金字塔 得出图片类似轮廓
图像轮廓 findContours
轮廓近似 approxPolyDP
模版匹配
·TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
.TM_cCORR:计算相关性,计算出来的值越大,越相关
·TM_cCOEFF:计算相关系数,计算出来的值越大,越相关
.TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关
·TM_CCORR_NORMED:计算归—化相关性,计算出来的值越接近1,越相关
.TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关
直方图 calcHist ravel函数
img = cv2.imread("xxx.jpg",0)
hist = cv2.calcHist([img],[0],None,[256],[0,256])
hist.shape
plt.hist(img.ravel(),256)
plt.show()
numpy中的ravel()、flatten()、squeeze()都有将多维数组转换为一维数组的功能,区别:
ravel():如果没有必要,不会产生源数据的副本
flatten():返回源数据的副本
squeeze():只能对维数为1的维度降维
另外,reshape(-1)也可以“拉平”多维数组
mask 操作
直方图均衡化 equalizeHist
算法
img = cv2.imread("xxx.jpg",0)
plt.hist(img.ravel(),256)
plt.show()
equ = cv2.equalizeHist(img)
plt.hist(equ.ravel(),256)
plt.show()
res = np.hstack((img,equ))
cv2.show("dd",res)
自适应直方图均衡化 createCLAHE
概述:(8,8),就是一张图上面分很多个8x8的小格子,小格子里面进行均衡化
img = cv2.imread("123.jpg",0)
equ = cv2.equalizeHist(img)
res = np.hstack((img,equ))
clahe = cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv2.imshow("ww",res)
cv2.waitKey(0)
傅里叶变换 dft idft
https://zhuanlan.zhihu.com/p/19763358
代码
低频过滤效果 模糊
高频
蛮力匹配(Brute-Force)BFMatcher()
# 第一步:构造sift,求解出特征点和sift特征向量
# detectAndCompute 就是detect和compute
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
如果想要更快速的完成操作,用cv2.FlannBasedMarcher