当前位置:   article > 正文

python_opencv(cv2)模块+灰度图二值化及降噪处理_lenna二值化处理

lenna二值化处理

1.安装:

网上说的那些,pip install cv2, opnecv。

全!都!是!坑!爹!的!

正确的操作方式如下:

pip install opencv-python

2.具体用法:

长期更新,学到哪写到哪。ps:也有可能不更了

基本头文件:

  1. import cv2
  2. import numpy as np

读取文件: 

  1. lenna = cv2.imread("lenna.png")
  2. #读取图片
  3. #lenna为一个3维数组。具体代表含义如下
  4. row, col, channel = lenna.shape
  5. #返回像素高度,像素宽度,和通道数一般为3

图片如下:

 

内容1:(将图像处理为灰度or二值图)

我们日常的环境通常获得的是彩色图像,很多时候我们常常需要将彩色图像转换成灰度图像。也就是3个通道(RGB)转换成1个通道。

  1. #用一个二维数组表示每一个点的灰度
  2. lenna_gray = np.zeros((row, col))
  3. for r in range(row):
  4. for l in range(col):
  5. lenna_gray[r, l] = 1 / 3 * lenna[r, l, 0] + 1 / 3 * lenna[r, l, 1] + 1 / 3 * lenna[r, l, 2]
  6. #此方法为平均值法
  7. #除此之外还有其他多种方式将彩色图处理为灰度图
  8. lenna_gray[r, l] = 0.11 * lenna[r, l, 0] + 0.59 * lenna[r, l, 1] + 0.3 * lenna[r, l, 2]
  9. #加权平均值法

在处理为单通道的灰度图后,我们就可以将其开始处理,使其变为只含有灰度0和255的“真”灰度图像。因为0代表黑色,255代表白色。我们设定一个阈值T,当某像素点的灰度值大于T时,设定该像素点的值为255,当小于T时,设定为0。

  1. lenna_binary = np.zeros_like(lenna_gray)
  2. #zeros_like表示生成一个维度同lenna_gray一样的全为0的张量
  3. threshold = 100
  4. for r in range(row):
  5. for l in range(col):
  6. if lenna_gray[r, l] >= threshold:
  7. lenna_binary[r, l] = 255
  8. else:
  9. lenna_binary[r, l] = 0
  10. cv2.imshow("lenna_binary", lenna_binary.astype("uint8"))
  11. cv2.waitKey()

二值图结果如下:

内容2:降噪处理方法

上面的这张图可能看到,像周围的一些细节很丰富,小的黑白点交错。但是,这些“细节”是我们在真正使用时,所不需要的,会影响我们对主要特征的提取,因此我们一般都要进行降噪处理。

关于降噪,我们有好几种方法去进行操作:

1.将每个像素替换为该像素周围像素的均值。这样就可以平滑并替代那些强度变化明显的区域。

OpenCV中,可以通过blur函数做到这一点。

  1. result = cv2.blur(image,(5,5))
  2. #上为均值模糊去噪方法。周围的都为均值
  3. #又称为低通滤波
  4. gaussianResult = cv2.GaussianBlur(img,(5,5),1.5)
  5. #上为高斯模糊去噪方法。在某些情况下,需要对一个像素的周围的像素给予更多的重视。因此,可通过分配权重来重新计算这些周围点的值。
  6. #(5,5)不可以随意指定,只能指定1,3,5,7.....等数字

处理好之后为新的3维张量。

平滑处理后的灰度图如上所示。

低通滤波与高斯滤波的不同之处在于:低通滤波中,滤波器中每个像素的权重是相同的,即滤波器是线性的。而高斯滤波器中像素的权重与其距中心像素的距离成比例。

除此之外,还有一种去噪方法为中值滤波器。(主要用来处理图像中的椒盐现象)

椒盐现象(图像中的黑白噪声)图:

函数返回处理结果,第一个参数是待处理图像,第二个参数是孔径的尺寸,一个大于1的奇数。比如这里是5,中值滤波器就会使用5×5的范围来计算。即对像素的中心值及其5×5邻域组成了一个数值集,对其进行处理计算,当前像素被其中值替换掉。
如果在某个像素周围有白色或黑色的像素,这些白色或黑色的像素不会选择作为中值(最大或最小值不用),而是被替换为邻域值。

result = cv2.medianBlur(image,5)

通过降噪以后进行二值化得出处理后的结果图

除去了不必要的细节保留了绝大部分主特征。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/975382
推荐阅读
相关标签
  

闽ICP备14008679号