opencv视觉学习——第二弹
2026/5/5 8:18:55 网站建设 项目流程

一.图像阈值

1.格式: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(img1_grey, 127,255,cv2.THRESH_BINARY) ret, thresh2 = cv2.threshold(img1_grey, 127,255,cv2.THRESH_BINARY_INV) ret, thresh3 = cv2.threshold(img1_grey, 127,255,cv2.THRESH_TRUNC) ret, thresh4 = cv2.threshold(img1_grey, 127,255,cv2.THRESH_TOZERO) ret, thresh5 = cv2.threshold(img1_grey, 127,255,cv2.THRESH_TOZERO_INV) titles = ['OriginalImage','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV'] images = [img1, thresh1,thresh2,thresh3,thresh4,thresh5] for i in range(6): # 创建子图(拆分逗号写法,更易读) plt.subplot(2, 3, i+1) # 绘制图像:灰度图用cmap='gray',原图已转RGB无需配色 plt.imshow(images[i], cmap='gray' if i>0 else None) # 添加标题 plt.title(titles[i]) # 修正:拆分xticks和yticks调用,取消链式错误写法 plt.xticks([]) plt.yticks([]) # 调整子图间距,避免标题/图像重叠 plt.tight_layout() # 显示图像 plt.show()

上面代码中“img1_grey”要换成自己图片的名称,示例结果如下:

二.图像平滑

1.先读入一张图片

img = cv2.imread('D:/Users/3.jpg')#路径换成自己的 cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows()

2.均值滤波的处理方法

——一种线性平滑滤波方法,通过计算邻域内像素的平均值替代中心像素值,降低图像噪声。

其中(3,3)是可以自己规定的选取图片窗口大小,不同的值最后呈现结果不一样。

#均值滤波 #简单的平均卷积操作 blur = cv2.blur(img, (3, 3)) cv2.imshow('blur',blur) cv2.waitKey(0) cv2.destroyAllWindows()

3.方框滤波的处理

normalize所等于的值不一样,最后结果不同,如果是True的话,是小于255,避免溢出,若等于False容易溢出,导致图像变白。

#方框滤波 #基本和均值一样,可以选择归一化 box = cv2.boxFilter(img,-1,(3,3),normalize=True) cv2.imshow('box',box) cv2.waitKey(0) cv2.destroyAllWindows()

4.高斯滤波的处理

#高斯滤波 #高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的 aussian = cv2.GaussianBlur(img,(5,5),1)#5,5是所框选的范围。5*5 cv2.imshow('aussian',aussian) cv2.waitKey(0) cv2.destroyAllWindows()

5.中值滤波的处理

#中值滤波 #相当于用中值代替 median = cv2.medianBlur(img,5)#中值滤波 cv2.imshow('median',median) cv2.waitKey(0) cv2.destroyAllWindows()

6.将所有的方法放在一起展示结果

三.形态学——腐蚀操作

1.读入图片之后,可以调整展示的窗口的大小

img = cv2.imread("D:/Users/4.jpg") new_width = 400 new_height = 300 resized_img = cv2.resize(img,(new_width,new_height)) cv2.imshow('resized_img',resized_img) cv2.waitKey(0) cv2.destroyAllWindows()

2.设置盒子以及迭代次数,来决定腐蚀的速度

kernel = np.ones((5,5),np.uint8)#内盒决定腐蚀的速度 erosion = cv2.erode(resized_img,kernel,iterations = 1)#迭代次数 cv2.imshow('erosion',erosion) cv2.waitKey(0) cv2.destroyAllWindows()

3.放在一起展示不同的迭代次数,所呈现的不同效果

kernel = np.ones((3,3),np.uint8) erosion_1 = cv2.erode(resized_img,kernel,iterations = 1) erosion_2 = cv2.erode(resized_img,kernel,iterations = 2) erosion_3 = cv2.erode(resized_img,kernel,iterations = 3) res = np.hstack((erosion_1,erosion_2,erosion_3)) cv2.imshow('res',res) cv2.waitKey(0) cv2.destroyAllWindows()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询