使用Python + OpenCV如何实现图像二值化

  介绍

这篇文章运用简单易懂的例子给大家介绍使用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 () 

运行结果:

使用Python + OpenCV如何实现图像二值化

注意:

<强> 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 ,写的很不错。

阈值类型:

使用Python + OpenCV如何实现图像二值化

阈值类型图示:

使用Python + OpenCV如何实现图像二值化

③类型参数单独选择上述五种阈值类型时,是固定阈值算法,效果比较差。

此外还有自适应阈值算法:(自适应计算合适的阈值,而不是固定阈值)

比如结合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

使用Python + OpenCV如何实现图像二值化