zoukankan      html  css  js  c++  java
  • 直方图

    • 函数

      • 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()

  • 相关阅读:
    perlcgiform2
    Linux的Find使用
    perl去除字符串前后的空格
    SQL快速查找
    026*:冷热启动优化、二进制重排、clang插桩(Header、Load Commands 、segment)(main函数前、main函数后)重签名 、ASLR、(PageFault 、System Trace、order文件)fsanitizecoverage=func,tracepcguard Dl_info
    阿里面试题:缓存的一些常见的坑,你遇到过哪些,怎么解决的?
    公司有着 30 多年经验的程序员被辞退了
    PHP7.3报错undefined function simplexml_load_string()(已解决)
    swoole框架中退出命令行程序仍然运行 php a.php &
    mysql服务器cpu爆满解决办法
  • 原文地址:https://www.cnblogs.com/missdx/p/12420575.html
Copyright © 2011-2022 走看看