欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-18 09:44:05
文章目录简介总结图像阈值图像平滑均值滤波方框滤波高斯滤波中值滤波简介本节为《OpenCV计算机视觉实战(Python)》版第三讲,阈值与平滑处理,的总结。总结图像阈值ret, dst = cv2.threshold(src, thresh, maxval, type)src: 输入图,只能输入单通道图像,通常来说为灰度图dst: 输出图thresh: 阈值maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值type: 二值化操作的类型,包含以下5种类型:...

简介

本节为《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