• OpenCV 图像二值化 threshold


    一:什么是二值图像

    彩色图像:三个通道0-255,0-255,0-255,所以可以有2^24位空间
    
    灰度图像:一个通道0-255,所以有256种颜色
    
    二值图像:只有两种颜色,黑和白,1白色,0黑色

    二:图像二值化

    (一)先获取阈值

    (二)根据阈值去二值化图像

    (三)OpenCV中的二值化方法

    四)补充阈值类型

    原灰度图像的像素值

    1.THRESH_BINARY:过门限的值为最大值,其他值为0

    2.THRESH_BINARY_INV:过门限的值为0,其他值为最大值

    3.THRESH_TRUNC:过门限的值为门限值,其他值不变

     

    4.THRESH_TOZERO:过门限的值不变,其他设置为0

    5.THRESH_TOZERO_INV:过门限的值为0,其他不变

    三:代码实现全局阈值

     cv.threshold( src, thresh, maxval, type[, dst] ) 

    参数说明:

    src:原图像。

    dst:结果图像。

    thresh:当前阈值。

    maxVal:最大阈值,一般为255.

    thresholdType:阈值类型,主要有下面几种:

     1 enum ThresholdTypes {
     2 THRESH_BINARY = 0,
     3 THRESH_BINARY_INV = 1,
     4 THRESH_TRUNC = 2,
     5 THRESH_TOZERO = 3,
     6 THRESH_TOZERO_INV = 4,
     7 THRESH_MASK = 7,
     8 THRESH_OTSU = 8,
     9 THRESH_TRIANGLE = 16
    10 };

    (一)全局阈值使用THRESH_OTSU大津法

    1    def threshold_demo(image):
    2     gray = cv.cvtColor(image,cv.COLOR_RGB2GRAY)   #要二值化图像,要先进行灰度化处理
    3     ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)
    4     print("threshold value: %s"%ret)  #打印阈值,前面先进行了灰度处理0-255,我们使用该阈值进行处理,低于该阈值的图像部分全为黑,高于该阈值则为白色
    5     cv.imshow("binary",binary)  #显示二值化图像 

    threshold value: 140.0  #获取的阈值是140

    (二)全局阈值使用THRESH_TRIANGLE(三角形算法)

    ret, binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_TRIANGLE)

    threshold value: 67.0

    (三)上面使用大津法和三角形算法都是自动去获取阈值,下面我们自己直接指定阈值

    (1)THRESH_BINARY_INV大于阈值的都为0

    ret, binary = cv.threshold(gray,127,255,cv.THRESH_BINARY_INV)

    threshold value: 127.0

    (2)THRESH_TRUNC截断大于127的值都为127

    ret, binary = cv.threshold(gray,127,255,cv.THRESH_TRUNC)

    (3)THRESH_TOZERO小于阈值的都为0和(1)相反

    ret, binary = cv.threshold(gray,127,255,cv.THRESH_TOZERO)

  • 相关阅读:
    QT移植详解
    如何构建Qt4.7.0嵌入式开发环境
    Qt触摸屏、键盘的驱动[转]
    【详解】如何编写Linux下Nand Flash驱动
    QT安装 -->Error: register or shift expression expected -- `orr r3,r2,lsl#16'
    QT环境搭建常见的bug解决 -->ld: cannot find –lbootstrap 错误
    SDK支付流程
    IOS与Unity交互
    Android
    [转]个人对AutoResetEvent和ManualResetEvent的理解
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/12822027.html
Copyright © 2020-2023  润新知