hsv=cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
ret, dst = cv2.threshold(src, thresh, maxval, type)
src: 输入图,只能输入单通道图像,通常来说为灰度图
dst: 输出图
thresh: 阈值
maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
cv2.THRESH_BINARY_INV THRESH_BINARY的反转
cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)
titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(6):
plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
plt.title(titles[i])
plt.xticks([]), plt.yticks([])
plt.show()
在进行均值滤波的时候要考虑需要对周围多少个像素去平均值,即确定核 的大小,通常情况下都是以当前像素点为中心,读行数和列数相等的一块区域内的所有像素点求平均。将计算得到的结果作为该点的像素。
dst=cv2.blur(src,ksize,anchor,borderType)
# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))
可以自由选择是否对均值滤波结果进行归一化,即可以自由选择滤波结果是邻域像素值之和的平均值还是邻域像素值之和,如果不进行归一化,则效果和均值滤波一样
dst=cv2.boxFilter(scr,ddepth,ksize,anchor,normalize,borderType)
在均值滤波中,其邻域内每个像素的权重都是一样的,在高斯滤波中,中心点的权重值加大,远离中心点的权重值减少,在此基础上计算邻域内各个像素值不同权重的和。
dst=cv2.GaussianBlur(src,ksize,sigmaX,sigmaY,borderType)
dst为高斯滤波后得到的结果
src是需要处理的图像,
ksize是滤波卷积核。需要注意的是滤波核 的值必须是奇数
sigmaX是卷积在水平方向的标准差,或者X方向求导
sigmaY是卷积在垂直方向的标准差,或者说Y方向上
bordenType是边界类型
中值滤波就是将当前像素点及其邻域内的像素点排序后取中间值作为当前值的像素点。
总结:
相比原始图像,高斯滤波处理后的图像模糊了一些,但是相对于均值滤波来说,要好一些,这是因为高斯滤波卷积核在中心点的权重更高。
在中值滤波处理中,噪声成分很难被选中,所以可以在几乎不影响原有图像的情况下去除所有的噪声,但是由于需要进行排序等操作,中值滤波需要的运算较大。中值滤波对椒盐噪声去除效果较明显。
形态学操作是根据图像形状进行的简单操作。一般情况下对二值化图像/灰度图像(就只有0和255)进行操作。它需要输入两个操作,一个是原始图像,另一个被称为结构化元素或核,它是用来决定操作的性质的。两个基本的形态学操作是腐蚀和膨胀,它们的变体构成了开运算、闭运算和梯度等。简言之,形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",注意腐蚀和膨胀是针对图片中的白色部分。
腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。因为是二值化图,只有 0 和 255,所以小区域内有一个是 0 该像素点就为 0:(将白色内容变小)
膨胀与腐蚀相反,取的是局部最大值,效果是把图片"变胖"。OpenCV 中用 cv2.dilate() 函数进行腐蚀,只需要指定核的大小即可:
dilation = cv2.dilate(img, kernel)
开运算:先腐蚀后膨胀,可用以消除黑色背景中的白点杂质
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
闭运算:先膨胀后腐蚀,可用以消除白色前景中的黑点杂质
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
形态学梯度:膨胀图减去腐蚀图 (dilation - erosion),得到物体轮廓。
pie = cv2.imread('pie.png')
kernel = np.ones((7,7),np.uint8)
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
连接:
https://blog.csdn.net/ONEFPGA/article/details/125255288
https://blog.csdn.net/qq_41731861/article/details/123919662