怎么进行二值化处理
的有关信息介绍如下:对图片进行二值化处理,对于创建模版、掩膜、抠图,都有重要作用。
本文,介绍的是在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)
此时,图像里面的噪音就很少了。