这篇文章运用简单易懂的例子给大家介绍使用Python + OpenCV如何实现图像二值化,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
<>强普通图像二值化强>
代码如下:
进口cv2简历 进口numpy np #全局阈值 def threshold_demo(图片): 灰色=简历。cv.COLOR_RGB2GRAY cvtColor(图片)#把输入图像灰度化 #直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。 受潮湿腐烂、二进制=简历。阈值(灰色,0 255简历。THRESH_BINARY | cv.THRESH_TRIANGLE) 打印(“阈值% s" % ret) cv.namedWindow (“binary0" cv.WINDOW_NORMAL) cv.imshow (“binary0"二进制) #局部阈值 def local_threshold(图片): 灰色=简历。cv.COLOR_RGB2GRAY cvtColor(图片)#把输入图像灰度化 #自适应阈值化能够根据图像不同区域亮度分布,改变阈值 二进制=简历。cv.ADAPTIVE_THRESH_GAUSSIAN_C adaptiveThreshold(灰色,255年,简历。25岁的THRESH_BINARY 10) cv.namedWindow (“binary1" cv.WINDOW_NORMAL) cv.imshow (“binary1"二进制) #用户自己计算阈值 def custom_threshold(图片): 灰色=简历。cv.COLOR_RGB2GRAY cvtColor(图片)#把输入图像灰度化 h, w=gray.shape (2): m=np。重塑(灰色,[1 w * h]) 意味着=m.sum ()/(w * h) 打印(“的意思是:“,意味着) 受潮湿腐烂、二进制=简历。阈值(灰色,意思是,255年,cv.THRESH_BINARY) cv.namedWindow (“binary2" cv.WINDOW_NORMAL) cv.imshow (“binary2"二进制) src=https://www.yisu.com/zixun/cv.imread (E:/imageload/kobe.jpg) cv.namedWindow (input_image, cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放 简历。imshow (input_image, src) threshold_demo (src) local_threshold (src) custom_threshold (src) cv.waitKey (0) cv.destroyAllWindows ()
运行结果:
注意:
<强> 1。全局阈值强>
①OpenC的阈值函数进行全局阈值。其函数原型为:阈值(src,推敲,maxval类型(dst))→retval, dst
src参数表示输入图像(多通道,8位或32位浮点)。
打参数表示阈值。
maxval参数表示与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用设置的最大值。
类型参数表示阈值类型。
retval参数表示返回的阈值。若是全局固定阈值算法,则返回打参数值。若是全局自适应阈值算法,则返回自适应计算得出的合适阈值。
dst参数表示输出与src相同大小和类型以及相同通道数的图像。
②类型参数阈值类型这部分参考博客:https://blog.csdn.net/iracer/article/details/49232703 ,写的很不错。
阈值类型:
阈值类型图示:
③类型参数单独选择上述五种阈值类型时,是固定阈值算法,效果比较差。
此外还有自适应阈值算法:(自适应计算合适的阈值,而不是固定阈值)
比如结合cv.THRESH_OTSU,写成简历。THRESH_BINARY |简历。THRESH_OTSU。例子:ret,二进制=简历。阈值(灰色,0 255简历。THRESH_BINARY | cv.THRESH_OTSU) #大律法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用只
比如结合cv.THRESH_TRIANGLE,写成简历。THRESH_BINARY |简历。THRESH_TRIANGLE。例子:ret,二进制=简历。阈值(灰色,0 255简历。THRESH_BINARY | cv.THRESH_TRIANGLE) #三角形法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用,适用于单个波峰只,
补:
cv.THRESH_OTSU和简历。THRESH_TRIANGLE也可单独使用,不一定要写成和固定阈值算法结合的形式。单独写和结合起来写,都是自适应阈值算法优先。
例子:ret,二进制=简历。阈值(灰色,0,255,,cv.THRESH_OTSU), #大律法,,,ret,二进制=简历。阈值(灰色,0,255,,cv.THRESH_TRIANGLE), #三角形法,,
<强> 2。局部阈值强>
OpenCV的adaptiveThreshold函数进行局部阈值。函数原型为:adaptiveThreshold (maxValue src adaptiveMethod、thresholdType blockSize, C (dst))→dst