图像阈值:
高斯滤波:高斯滤波GaussianBlur
Canny边缘检测:Canny边缘检测
import cv2 as cv
import numpy as np
# 图像阈值
'''
# cv.THRESH_BINARY 黑白二值化
# cv.THRESH_BINARY_INV 黑白二值化反转
# cv.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
# cv.THRESH_TOZERO 大于阈值部分不变,否则设为零
# cv.THRESH_TOZERO_INV 第四种情况的反转
ret, thresh = cv.threshold(img, 127, 255, cv.THRESH_BINARY) # 二值化,175为阈值,255为最大值
'''
# 平滑处理
'''
# 均值滤波
img1 = cv.blur(img, (3, 3)) # (3,3)为核大小
# 高斯滤波
img2 = cv.GaussianBlur(img, (5, 5), 1) # (3,3)为核大小,1为高斯核函数在X方向的的标准偏差,越大平滑效果越明显
# 中值滤波
img3 = cv.medianBlur(img, 5) # 5为核的边长
# 展示所有图片
res = np.hstack((img1, img2, img3))
cv.imshow('imgs', res)
'''
# 腐蚀操作(通常处理二值数据)
'''
kernel = np.ones((3, 3)) # 没有奇数限制
erosion = cv.erode(img, kernel, iterations=1) # 最后一个参数表示迭代次数
'''
# 膨胀操作(通常处理二值数据)
'''
kernel = np.ones((3, 3)) # 没有奇数限制
erosion = cv.dilate(img, kernel, iterations=1) # 最后一个参数表示迭代次数
'''
# 开运算(先腐蚀,再膨胀)与闭运算(先膨胀,再腐蚀),梯度运算(梯度=膨胀-腐蚀)
# 梯度运算(梯度=膨胀-腐蚀) cv.MORPH_GRADIENT
# 礼帽(原始输入-开运算结果) cv.MORPH_TOPHAT
# 黑帽(闭运算-原始输入) cv.MORPH_BLACKHAT
'''
kernel = np.ones((3, 3)) # 没有奇数限制
img = cv.morphologyEx(img, cv.MORPH_OPEN, kernel, iterations=1) # cv.MORPH_OPEN为开运算,cv.MORPH_CLOSE为闭运算
'''
# 梯度计算(灰度和彩色均可)
'''
# laplacian算子(对噪音点敏感,常与其它算法共同使用)
laplacian = cv.Laplacian(img, cv.CV_64F) # 没有xy方向上的分离
# sobel算子,Scharr算子(更敏感,捕捉信息更多)
sobelx = cv.Sobel(img, cv.CV_64F, 1, 0, ksize=3) # X方向上的梯度,此时数值存在正负
sobelx = cv.convertScaleAbs(sobelx) # 对其进行绝对值操作,否则只能显示出白减黑的梯度
sobely = cv.Sobel(img, cv.CV_64F, 0, 1, ksize=3) # Y方向上的梯度
sobely = cv.convertScaleAbs(sobely)
sobelxy = cv.addWeighted(sobelx, 0.5, sobely, 0.5, 0) # 对X、Y方向梯度进行融合,不建议一步完成
'''
# Canny边缘检测:
'''
# 1.使用高斯滤波,平滑图像,消除噪声
# 2.计算图像中每个像素点的梯度强度和方向
# 3.应用非极大值抑制,消除边缘检测带来的杂散影响
# 4.应用双阈值检测来确定真实和潜在的边缘
# 5.通过抑制孤立的弱边缘完成边缘检测
img = cv.Canny(img, 100, 150) # 两参数为双阈值中min和max,两者越大,则要求越高、细节越少
'''