当前位置: 移动技术网 > IT编程>脚本编程>Python > OpenCV计算机视觉实战(Python)| 03、阈值与平滑处理

OpenCV计算机视觉实战(Python)| 03、阈值与平滑处理

2020年07月26日  | 移动技术网IT编程  | 我要评论

简介

本节为《OpenCV计算机视觉实战(Python)》版第三讲,阈值与平滑处理,的总结。

总结

图像阈值

ret, dst = cv2.threshold(src, thresh, maxval, type)

  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type: 二值化操作的类型,包含以下5种类型:
    1. cv2.THRESH_BINARY: 超过阈值部分取maxval(最大值),否则取0
    2. cv2.THRESH_BINARY_INV:cv2.THRESH_BINARY的反转
    3. cv2.THRESH_TRUNC: 截断操作,大于阈值的部分设为阈值,否则不变
    4. cv2.THRESH_TOZERO: 大于阈值部分不变,否则取0
    5. cv2.THRESH_TOZERO_INV: cv2.THRESH_TOZERO的反转

白:255
黑:0

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.ysticks([])  # 坐标轴设置
plt.show()

图像平滑

图像平滑也就是常说的滤波操作,这里介绍了:均值、方框、高斯、中值四种滤波方法。

均值滤波

blur = cv2.blur(img, (3,3))

cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows(0)

在掩模内,求像素点和的均值。
掩模大小:一般为奇数,33,55,7*7。上述示例中的掩模大小为3 * 3

方框滤波

方框滤波的计算方法与均值滤波一致。

box = cv2.boxFilter(img,-1,(3,3),normalize=TRUE)

cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

方框滤波的参数:

  1. “-1”:Python中的“-1”一般代表不改变,自动的计算,与原始通道数保持一致,通常情况下不需要改变该数值
  2. (3,3):表示掩模大小为3*3
  3. normalize = TRUE: 当normalize为TRUE时,即为均值滤波;当其为FALSE时,将像素求和后大于255的像素值置为255

高斯滤波

gauss = cv2.GaussianBlur(img, (5,5), 1)

cv2.imshow('gauss',gauss)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波的思想为:高斯函数,距离原点越近,权重越大。

中值滤波

median = cv2.medianBlur(img, 5)

cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

扩展:图像拼接和展示

np.hstack: 矩阵横向拼接
np.vstack: 矩阵纵向拼接

res = np.hstack(blur,gauss,median)

cv2.imshow('median cv average', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

本文地址:https://blog.csdn.net/lovetaozibaby/article/details/107575045

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网