美文网首页
阈值处理

阈值处理

作者: 长歌行夜一 | 来源:发表于2020-06-08 13:44 被阅读0次

OpenCV提供了两个函数cv2.threshold() 和 cv2.adaptiveThreshold(),用于实现阈值处理。

1.cv2.threshold()函数

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

式中

-- retval 代表返回的阈值;

-- dst 代表阈值分割结果图像,与原始图像具有相同的大小和类型;

-- src 代表要进行阈值分割的图像,可以是多通道的,8位或32位浮点型数值;

-- thresh 代表要设定的阈值;

-- maxval代表当type参数为THRESH_BINARY或者THRESH_BINARY_INV类型时,需要设置的最大值;

-- type代表要分割的类型。

1)二值化阈值处理(cv2.THRESH_BINARY)

会将原始图像处理为仅包含两个值的二值图像。将大于阈值的像素点其灰度值设为最大值。小于或等于阈值的像素点设置为0。(在8位图像中,最大值是255)

2)反二值化阈值预处理(cv2.THRESH_BINARY_INV)

也是得到一幅二值图像。与cv2.THRESH_BINARY相反,大于阈值的像素点设定为0;大于小于阈值的设定为最大值。

代码如下:

img = cv2.imread('wasser_2.jpg')

# 默认指定原图像坐标(0,0)为缩小区域以外的颜色。

# mapxy = scale_img(img, 2)

shape_img = img.shape

# 二值化处理

yu, rst = cv2.threshold(img,180,255,type=cv2.THRESH_BINARY)

# 反二值化处理

yu2, rst_f = cv2.threshold(img,180,255,type=cv2.THRESH_BINARY_INV)

cv2.imshow("img",img)

cv2.imshow("erzhi_img_%s"%yu,rst)

cv2.imshow("erzhi_img_f%s"%yu,rst_f)

return_value = cv2.waitKey(0)

cv2.destroyAllWindows()

效果:(注意原始图像是彩色图)

3)截断阈值化处理(cv2.THRESH_TRUNC)

将超过阈值的像素点的值设为阈值。

4)超阈值零处理(cv2.THRESH_TOZERO_INV)

将超过阈值的像素点的值设为零。

5)低于阈值零处理(cv2.THRESH_TOZERO)

将低于阈值的像素点的值设为零。

2.自适应阈值处理

对于色彩均衡的图像,直接用一个阈值就能完成对图像的阈值化处理。但是有时候图像的色彩是不均衡的,此时如果只使用一个阈值,就无法得到清洗有效的阈值分割图像。

自适应阈值处理:通过计算像素点周围邻近区域的加权平均值获得阈值。并使用该阈值对当前像素点进行处理。·该方法能够很好的处理明暗差异较大的图像。

方法:cv2.adaptiveThreshold()

cv2.adaptiveThreshold(src,maxvalue,adaptiveMethod,thresholdType,blockSize,C)

src :代表原始图像,而且该图像必须是8位单通道的图像;

adaptiveMethod :代表自适应方法,包含cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C两种不同的方法。两种方法都是逐个元素计算自适应阈值,自适应阈值等于每个像素由blockSize所指定邻域的加权平均值减去常量C;

maxvalue :代表最大值;

thresholdType : 代表阈值的处理方式,该值必须是cv2.THRESH_BINARY或者cv2.THRESH_BINARY中的一个;

blockSize :代表块大小,表示计算阈值时所使用的邻域尺寸,通常为3、5、7等;

C :是常量

例如提取彩色图像的G通道来进行自适应阈值处理:

meanAth = cv2.adaptiveThreshold(img[:,:,1],255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,5,3)

gaussAth = cv2.adaptiveThreshold(img[:,:,1],255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,5,3)

3.Otsu处理

Otsu方法能够根据当前图像给出最佳的类间分割阈值(通过遍历所有可能阈值)。通过在cv2.threshold()的type参数的类型多传递一个参数"cv2.THRESH_OTSU",并且将阈值设为零,即可实现Otsu阈值分割,并且返回最优阈值和分割结果。注:该方法只适用于处理单通道数据。

相关文章

  • 阈值处理

    阈值处理 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰...

  • 阈值处理

    OpenCV提供了两个函数cv2.threshold() 和 cv2.adaptiveThreshold(),用于...

  • 阈值处理

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第6...

  • 阈值处理

    阈值处理是指剔除图像内像素高于一定值或者低于一定值的像素点 二值化阈值处理(cv2.THRESH_BINARY) ...

  • OpenCV--图像处理 图像阈值

    3、图像处理 图像阈值 thresh 通过对像素点与阈值的比较,当大于阈值或小于阈值时分别进行取值 ret, ds...

  • 自适应阈值处理与Otsu处理---OpenCV-Python开发

    为什么需要自适应阈值处理 对于色彩均衡的图像来说,直接使用一个阈值就能完成对图像的阈值化处理。但是,有时候图像的色...

  • OpenCV-Python系列三:图像分割(1)--阈值

    阈值分割是图像处理中非常实用的操作,对我们提取目标区域,使图像信息更加简单(0和1)来加速后续的处理速度。图像阈值...

  • 自适应阈值处理

    《OpenCV轻松入门:面向Python》读书笔记作者:李立宗出版社:电子工业出版社出版时间:2019-05 第6...

  • iOS_OpenCV图像阈值化 (1)

    图像阈值化的思想是:给定一个数组或者阈值,然后根据数组中的每个元素的值是高于还是低于阈值而进行一些处理。 1、固定...

  • openCV:图像的阈值处理

    阈值处理 定义 阈值处理即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个...

网友评论

      本文标题:阈值处理

      本文链接:https://www.haomeiwen.com/subject/lyosahtx.html