当前位置:酷酷问答>生活百科>怎么进行二值化处理

怎么进行二值化处理

2024-09-16 21:17:48 编辑:zane 浏览量:525

怎么进行二值化处理

的有关信息介绍如下:

怎么进行二值化处理

对图片进行二值化处理,对于创建模版、掩膜、抠图,都有重要作用。

本文,介绍的是在python里面,调用opencv进行图片二值化的技巧。

给出下面的没有噪音的图片,可以直接二值化。

二值化处理,主要有五中内置方法:

# -*- coding: utf-8 -*-

import cv2

img=cv2.imread('d.jpg',0)

r,h1=cv2.threshold(img,200,255,cv2.THRESH_BINARY)

r,h2=cv2.threshold(img,200,255,cv2.THRESH_BINARY_INV)

r,h3=cv2.threshold(img,200,255,cv2.THRESH_TRUNC)

r,h4=cv2.threshold(img,200,255,cv2.THRESH_TOZERO)

r,h5=cv2.threshold(img,200,255,cv2.THRESH_TOZERO_INV)

我们可以用for语句来查看处理效果,每个图片持续0.5秒。

不过,如果换成下面这幅图片,上面任何一种方法都不是太好。

看看处理效果。

对上面第三步里面的图片进行自适应区域二值化处理:

a = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,

cv2.THRESH_BINARY,11,2)

cv2.ADAPTIVE_THRESH_MEAN_C 表示计算局部的像素的平均值;

cv2.THRESH_BINARY 是采用的二值化方法;

11表示每一个邻域的大小是11*11(单位是像素*像素,11必须是奇数);

2 表示平均值减去2,作为阈值。

下图是处理效果。

如果采用邻域大小为111*111,处理效果如下。

换一个方法,采用加权平均值:

a = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,

cv2.THRESH_BINARY,11,2)

cv2.ADAPTIVE_THRESH_GAUSSIAN_C 表示权重是高斯矩阵里面的元素;

11既表示邻域大小,又表示高斯矩阵大小。

邻域大小是311的效果。

给出下图。

采用普通二值化处理。

r,h1=cv2.threshold(img,125,255,cv2.THRESH_BINARY)

采用局部二值处理。

a = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,

cv2.THRESH_BINARY,211,2)

上面两种方法,都有噪音。

如果对图片进行模糊处理:

blur = cv2.GaussianBlur(img,(5,5),0)

这里采用的是5*5的高斯矩阵,对图片进行卷积处理。

然后进行二值化处理:

r,a = cv2.threshold(blur,125,255,cv2.THRESH_BINARY)

此时,图像里面的噪音就很少了。

版权声明:文章由 酷酷问答 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.kukuwd.com/life/38776.html
热门文章