• 【数字图像处理】阈值处理


    图像阈值处理是实现图像分割的一种方法,常用的阈值分割方法有简单阈值,自适应阈值,Otsu's二值化等。

    cv2.threshold()可以用来进行图像阈值处理,cv2.threshold(src, thresh, maxval, type) 第一个参数是原图像,第二个参数是对像素值进行分类的阈值,第三个参数是当像素值高于(小于)阈值时,应该被赋予的新的像素值,第四个参数是阈值方法。函数有两个返回值,一个为retVal, 一个阈值化处理之后的图像。

    常用的阈值方法有:

    全局阈值:

    自适应阈值

    当同一幅图像不同部分具有不同的亮度时,全局阈值并不适用,此时我们会采用自适应阈值,自适应阈值会在图像上每一个小区域计算与其对应的阈值。可以使用cv2.adaptiveThreshold()要传入三个参数:阈值计算方法,邻域大小,常数C, 阈值等于平均值或者加权平均值减去这个常数。

    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    
    img = cv2.imread('/home/vincent/Pictures/work/uy_gnix_iac.jpg')
    
    ret, thresh1 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    ret, thresh2 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY_INV)
    ret, thresh3 = cv2.threshold(img, 127, 255, cv2.THRESH_TRUNC)
    ret, thresh4 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO)
    ret, thresh5 = cv2.threshold(img, 127, 255, cv2.THRESH_TOZERO_INV)
    
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    
    
    for i in range(6):
    	plt.subplot(2,3, i+1)
    	plt.imshow(images[i])
    plt.suptitle('fixed threshold')
    
    img = cv2.imread('/home/vincent/Pictures/work/barbara.png', 0)
    
    print(img.shape)
    
    thresh6 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)
    
    thresh7 = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    
    ret, thresh8 = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
    
    images2 = [img, thresh6, thresh7, thresh8]
    
    
    plt.figure(2)
    for i in range(4):
    	plt.subplot(1,4,i+1)
    	plt.imshow(images2[i],'gray')
    plt.suptitle('adaptive threshold')
    
    plt.show()
    

     

  • 相关阅读:
    StringTable
    TCP网络协议
    也说JVM内存区域
    JVM类加载
    java中的引用:强、软、弱、虚
    AQS
    vscode支持unicode编码
    设计模式简记-快速改善代码质量的编程规范
    擅事利器
    设计模式简记-通过重构增强代码可测试性实战
  • 原文地址:https://www.cnblogs.com/vincentcheng/p/9261556.html
Copyright © 2020-2023  润新知