本文主要介绍用python OpenCV实现图像二值化,帮助你更好的利用python处理图像。感兴趣的朋友可以了解一下。
简介:图像二值化是将图像上像素的灰度值设置为0或255的过程,即整个图像呈现出明显的黑白效果。
普通图像二值化
代码如下:
将cv2作为cv导入
将numpy作为np导入
#全局阈值
定义阈值_演示(图片):
Gray=cv.cvtcolor (image,cv.color _ rgb2gray) #将输入图像灰化。
#直接阈值处理是逐个像素地对输入的单通道矩阵进行阈值处理。
ret,binary=cv.threshold(gray,0,255,cv。THRESH_BINARY | cv。THRESH _三角形)
打印(“阈值% s“% ret”)
cv.namedWindow('binary0 ',cv。窗口_正常)
cv.imshow('binary0 ',binary)
#本地阈值
定义本地阈值(图像):
Gray=cv.cvtcolor (image,cv.color _ rgb2gray) #将输入图像灰化。
#自适应阈值处理可以根据图像不同区域的亮度分布来改变阈值。
binary=cv . adaptive threshold(gray,255,cv。自适应阈值高斯C,cv。THRESH_BINARY,25,10)
cv.namedWindow('binary1 ',cv。窗口_正常)
cv.imshow('binary1 ',binary)
#用户自己计算阈值。
定义自定义阈值(图像):
Gray=cv.cvtcolor (image,cv.color _ rgb2gray) #将输入图像灰化。
h,w=gray.shape[:2]
m=NP . shape(gray,[1,w*h])
均值=m.sum()/(w*h)
打印('均值:',均值)
ret,binary=cv.threshold(灰色,平均值,255,cv。THRESH_BINARY)
cv.namedWindow('binary2 ',cv。窗口_正常)
cv.imshow('binary2 ',binary)
src=cv . im read(' E:/image load/Kobe . jpg ')
简历。命名窗口(' input _ image ',cv。WINDOW_NORMAL) #设置为WINDOW_NORMAL可以随意缩放。
cv.imshow('input_image ',src)
阈值_演示(src)
本地阈值(src)
自定义阈值(src)
cv.waitKey(0)
cv.destroyAllWindows()
运行结果:
注意:
1.全局阈值
OpenC的阈值功能执行全局阈值。函数原型是:threshold (src,thresh,maxval,type [,dst])-retval,dst。
src参数代表输入图像(多通道、8位或32位浮点)。
thresh参数表示阈值。
Maxval参数表示THRESH_BINARY和THRESH_BINARY_INV阈值类型设置的最大值。
type参数指示阈值类型。
retval参数指示返回的阈值。如果是全局固定阈值算法,则返回thresh参数值。如果是全局自适应阈值算法,则返回自适应计算得到的合适阈值。
dst参数表示输出与src具有相同大小和类型以及相同通道数的图像。
类型参数阈值类型这部分指的是写得好的博客:https://blog.csdn.net/iracer/article/details/49232703,
阈值类型:
阈值类型图:
当类型参数单独选择以上五种阈值类型时,为固定阈值算法,效果较差。
此外,还有一种自适应阈值算法:(自适应计算合适的阈值,而不是固定的阈值)
比如结合cv。THRESH_OTSU,写的是cv。thresh _ binary | cv。thresh _ otsu。例如:ret,binary=cv。阈值(灰色,0,255,cv。thresh _ binary | cv。thresh _ otsu) #大法则,全局自适应阈值,第二个参数值0可以改成任意数但是不起作用。
比如结合cv。THRESH_TRIANGLE,写成cv。thresh _ binary | cv。thresh _三角形。例如:ret,binary=cv。阈值(灰色,0,255,cv。thresh _ binary | cv。thresh _ triangle) #三角法,全局自适应阈值,第二个参数值0可以改成任意数但是不起作用。它适用于单个峰值。
化妆:
简历。OTSU和cv。THRESH_TRIANGLE也可以单独使用,不一定要和固定阈值算法结合起来写。单独写入或组合写入是自适应阈值算法的优先级。
例:ret,binary=cv.threshold (gray,0,255,cv.thresh _ otsu) #大法ret,binary=cv.threshold (gray,0,255,cv.thresh _ triangle) #三角法
2.局部阈值
OpenCV的adaptiveThreshold函数执行局部阈值。函数原型为:自适应阈值(src,maxvalue,自适应方法,阈值类型,块大小,c [,dst])-dst。
src参数表示输入图像(8位单通道图像)。
MaxValue参数表示THRESH_BINARY和THRESH_BINARY_INV的最大值。
adaptiveMethod参数表示自适应阈值算法,它是average (ADAPTIVE_THRESH_MEAN_C)或Gaussian(ADAPTIVE _ THRESH _ Gaussian _ C)。
ThresholdType参数表示阈值类型,必须是THRESH_BINARY或THRESH_BINARY_INV的阈值类型。
block参数表示块大小(大于1的奇数,如3、5、7.).
参数c是一个常数,表示从平均值或加权平均值中减去的数。通常,这是一个正值,但也可以是零或负值。
补充:在使用平均和高斯算法的情况下,可以通过计算每个像素周围的blockSizex blockSize的加权平均值并减去常数c来获得自适应阈值,如果使用平均方法,则所有像素周围的权重都是相同的;如果使用高斯方法,则每个像素周围像素的权重是根据其与中心点的距离通过高斯方程得到的。
参考:https://blog.csdn.net/guduruyu/article/details/68059450
3.numpy的reshape函数是给数组一个新的形状而不改变其数据,函数原型:reshape(a, newshape, order='C')
参数指示需要重组的原始数组。
newshape参数指示int或int tuple。如果是(1,3),则表示生成的新数组有1行3列。
顺序参数表指示按此索引顺序读取的元素,这些元素按此索引顺序放置在重组后的数组中。
函数返回值:如果可能,这将是一个新的视图对象;否则,它将成为一个副本。
以上是python OpenCV图像处理——中图像二值化的实现细节。关于Python中图像二值化的更多信息,请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。