• 直方图


    • 函数

      • cv2.calHist(images, channels, mask, histSize, ranges)
      • images :原图像,图像格式为 uint8 或 float32 。当传入函数时,应用中括号[],例如: [img]
      • channels:同样用中括号括起来。如果传入的是灰度图,它的值就是 [0] ,如果是彩色图像,传入的参数可以是 [0][1][2] ,他们分别对应着 BGR 。
      • mask :统计整幅图像的直方图,它的值就是 None ,但是如果你想统计图象的某一部分的直方图,你就使用掩模图像。
      • histSize : BIN 的数目。也应用中括号括起来。见右下直方图,一般BIN为256,代表0-255个值。
      • ranges :像素值范围,常为 [0256] 。

    •  代码示例

      •   shape介绍

    import cv2 as cv
    import numpy as np
    
    
    img = cv.imread('cat.jpg', 0) # 0代表灰度图
    hist = cv.calcHist([img], [0], None, [256], [0, 256])
    hist.shape
    输出:(256,1)

     256表示一共有256个可能的取值

    1表示输出是二维的。比如说值为123的有多少个,值为234的有多少个。

      •   画图

    import cv2 as cv
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    img = cv.imread('cat.jpg', 0) # 0代表灰度图
    hist = cv.calcHist([img], [0], None, [256], [0, 256])
    plt.hist(img.ravel(), 256)
    plt.show()

     

      •   分别画三个通道的直方图

    import cv2 as cv
    import matplotlib.pyplot as plt
    
    
    img = cv.imread('cat.jpg')
    color = ('b', 'g', 'r')
    for i,col in enumerate(color):
        histr = cv.calcHist([img], [i], None, [256], [0, 256])
        plt.plot(histr,color = col)
        plt.xlim([0, 256])

     

      •   mask操作

    首先创建掩膜,在规定区域使之为255。

    import cv2 as cv
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    img = cv.imread('cat.jpg', 0)
    # 创建mask
    mask = np.zeros(img.shape[:2], np.uint8) # img.shape[:2]取图像的高和宽
    mask[100:300, 100:400] = 255
    cv.imshow('mask', mask)
    cv.waitKey(0)
    cv.destroyAllWindows()

     运行结果:


    再将掩膜与原图进行与运算,使之合并:

    import cv2 as cv
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    img = cv.imread('cat.jpg', 0)
    # 创建mask
    mask = np.zeros(img.shape[:2], np.uint8) # img.shape[:2]取图像的高和宽
    mask[100:300, 100:400] = 255
    
    mask_img = cv.bitwise_and(img, img, mask=mask) # 与运算,图像的合并 同一张 名字不变 但是后面的mask 是自己设置的mask
    cv.imshow('mask_img', mask_img)
    cv.waitKey(0)
    cv.destroyAllWindows()

    结果如下:


    最后绘制掩膜部分的直方图:

    import cv2 as cv
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    img = cv.imread('cat.jpg', 0)
    # 创建mask
    mask = np.zeros(img.shape[:2], np.uint8) # img.shape[:2]取图像的高和宽
    mask[100:300, 100:400] = 255
    
    mask_img = cv.bitwise_and(img, img, mask=mask) # 与运算,图像的合并 同一张 名字不变 但是后面的mask 是自己设置的mask
    
    hist_mask = cv.calcHist([img], [0], mask, [256], [0, 256])
    plt.plot(hist_mask)
    plt.xlim([0, 256])
    plt.show()

  • 相关阅读:
    为什么编程是独一无二的职业
    TSQL 编程规范
    Windows实战Git环境配置msysGit+TortoiseGit
    Linux环境下Socket编程
    数据持久化
    Javascript类的定义和引用
    详解C中volatile关键字
    ACM HDU 1040 As Easy As A+B
    ACM POJ 1753Flip Game
    ACM HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/missdx/p/12420575.html
Copyright © 2020-2023  润新知