• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • python+opencv繪制直方圖

    直方圖定義

    • 橫坐標:圖像中各個像素點的灰度級
    • 縱坐標:就有該灰度級的像素個數

    歸一化直方圖

    • 橫坐標:圖像中各個像素點的灰度級
    • 縱坐標:出現這個灰度的概率

    DIMS: 使用參數的數量

    • dims = 1
      • 灰度直方圖,僅僅一件事情,僅僅考慮灰度的情況
    • BINS: 參數子集的數目

    直方圖繪制方法

    pyplot繪制直方圖

    • pyplot提供了類似matlab的繪圖框架

      • import matplolib.pyplot as plt
    • 函數hist hist(數據源,像素級)

      • 功能: 根據數據源合金像素級繪制直方圖
      • 數據源: 圖像,必須是一維數組
        • 函數ravel b = a.ravel()
          • 功能: 將多維數組降為一維數組
          • 格式: 一維數組=多維數組.revel()
      • 像素級: 一般是256,指[0, 255]

    opencv繪制直方圖

    • 統計直方圖函數 calcHist
      hist = cv2.calcHist(images, channels, mask, histSize, ranges, accumulate)
      
      • 參數
        • images : 原始圖像
        • channels : 指定通道
          • 通道編號需要用中括號括起來
          • 輸入圖像是灰度圖時,它的值為[0]
          • 彩色圖像可以使[0],[1],[2]分別對應通道B,G,R。
        • mask : 掩碼圖像
          • 統計整幅圖像的直方圖,設為None。
          • 統計圖像某一部分的直方圖時,需要掩碼圖像
          • 生成掩碼圖像
            mask = np.zeros(image.shape, np.uint8)
            mask[200:400, 200:400] = 255
            
        • histSize : BINS的數量
        • ranges : 像素值返回RANGE
          • 像素值范圍,例如:[0, 255]
        • accumulate : 累計標識
          • 默認值為false
          • 如果被設置為true,則直方圖在開始分配時不會被清零
          • 該參數允許從多個對象中計算單個直方圖,或者用戶實施更新直方圖
          • 多個直方圖的累計結果,用戶對一組圖像計算直方圖
      • 返回值
        • hist : 直方圖
      • 使用pyplot繪制

    生成掩膜圖像

    計算結果 = cv2.bitwise_and(圖像1, 圖像2)
    
    • 例如:
      mask = np.zero(800, np.uint8)
      mask[300:500, 300:500] = 255
      masked_img = cv2.bitwise_and(img, mask)
      

    直方圖均衡化

    • 理論基礎
      • 前提: 如果一幅圖像占有全部可能的灰度級,并且均勻分布。
      • 結論: 該圖像具有高對比度和多變的灰度色調
      • 外觀: 圖像細節豐富,質量更高
    • 算法
      • 計算累計直方圖
      • 將累計直方圖進行區間轉換
      • 在累計直方圖中,概率相近的原始值,會被處理為相同的值
    • 應用場合
      • 醫療圖像處理
      • 車牌識別
      • 人臉識別
    • 均衡化函數equalizeHist dst = cv2.equalizeHist(src)
      • 參數
        • src : 源圖像
      • 返回值
        • dst : 目標圖像,處理結果
    • 分欄函數subplot subplot(nrows, ncols, plot_number)
      • 參數
        • nrows : 行號
        • ncols : 列號
        • plot_number : 窗口序號
      • 示例: subplot(2, 3, 4)
      • 特例: 當每一個參數都小于10時,可以直接書寫三個數字,表示為subplot(234)

    實例

    使用pyplot繪制直方圖

    import cv2
    import matplotlib.pyplot as plt
    
    o = cv2.imread("/home/forrest/圖片/lena彩圖.png", cv2.IMREAD_GRAYSCALE)
    cv2.imshow("o", o)
    
    plt.hist(o.ravel(), 256)
    plt.show()
    
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    • 原圖
      原圖
    • 直方圖
      直方圖

    使用calcHist生成灰度圖像直方圖

    import cv2
    
    img = cv2.imread("/home/forrest/圖片/lena彩圖.png", cv2.IMREAD_GRAYSCALE)
    hist = cv2.calcHist([img], [0], None, [256], [0, 255])
    print(type(hist))
    print(hist.size)
    print(hist.shape)
    
    plt.plot(hist, color="r")
    plt.show()
    
    • 原始圖像
      原始圖像
    • 輸出結果
    <class 'numpy.ndarray'>
    256
    (256, 1)
    
    • 輸出直方圖
      直方圖

    使用calcHist生成彩色圖像直方圖

    import cv2
    import matplotlib.pyplot as plt
    
    img = cv2.imread("/home/forrest/圖片/lena彩圖.png")
    histb = cv2.calcHist([img], [0], None, [256], [0, 255])
    histg = cv2.calcHist([img], [1], None, [256], [0, 255])
    histr = cv2.calcHist([img], [2], None, [256], [0, 255])
    
    plt.plot(histb, color="b")
    plt.plot(histg, color="g")
    plt.plot(histr, color="r")
    plt.show()
    
    • 原始圖像
      原始圖像
    • 生成直方圖
      直方圖

    繪制掩碼直方圖

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    image = cv2.imread("/home/forrest/圖片/lena彩圖.png", cv2.IMREAD_GRAYSCALE)
    
    mask = np.zeros(image.shape, np.uint8)
    mask[200:400, 200:400] = 255
    
    histMI = cv2.calcHist([image], [0], mask, [256], [0, 255])
    histImage = cv2.calcHist([image], [0], None, [256], [0, 255])
    
    plt.plot(histImage)
    plt.plot(histMI)
    plt.show()
    
    • 原始圖像
      原始圖像
    • 繪制掩碼直方圖和整圖直方圖對比
      直方圖

    生成掩膜圖像

    import cv2
    import numpy as np
    
    image = cv2.imread("/home/forrest/圖片/lena彩圖.png", 0)
    
    mask = np.zeros(image.shape, np.uint8)
    mask[200:400, 200:400] = 255
    
    mi = cv2.bitwise_and(image, mask)
    cv2.imshow("original", image)
    cv2.imshow("mask", mask)
    cv2.imshow("mi", mi)
    
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    • 原始圖像
      原始圖像
    • 掩碼圖像
      掩碼圖像
    • 生成的掩膜圖像
      掩膜圖像

    圖像直方圖均衡化

    import cv2
    import matplotlib.pyplot as plt
    
    img = cv2.imread("/home/forrest/圖片/lena彩圖.png", cv2.IMREAD_GRAYSCALE)
    equ = cv2.equalizeHist(img)
    
    plt.subplot(221)
    plt.imshow(img, plt.cm.gray)
    plt.axis('off')
    
    plt.subplot(222)
    plt.hist(img.ravel(), 256)
    
    plt.subplot(223)
    plt.imshow(equ, plt.cm.gray)
    plt.axis('off')
    
    plt.subplot(224)
    plt.hist(equ.ravel(), 256)
    
    plt.show()
    
    • 結果
      結果

    pyplot顯示彩色圖像

    import cv2
    import matplotlib.pyplot as plt
    
    img = cv2.imread("/home/forrest/圖片/lena彩圖.png")
    b,g,r = cv2.split(img)
    img2 = cv2.merge([r, g, b])
    
    plt.subplot(121)
    plt.imshow(img)
    plt.axis('off')
    
    plt.subplot(122)
    plt.imshow(img2)
    plt.axis('off')
    
    plt.show()
    
    • 結果
      結果
    版權聲明:本文為wumu720123原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/wumu720123/article/details/89791009

    智能推薦

    OpenCV Matplotlib繪制直方圖

    繪制直方圖有兩種方法: 使用Matplotlib中的繪圖函數 使用OpenCV自帶的繪圖函數 使用OpenCV自帶函數繪制直方圖比較麻煩,這個不做介紹 Matplotlib中有直方圖繪制函數:matplotlib.pyplot.hist()它可以直接統計并繪制直方圖 單通道–灰度圖 多通道–彩圖 從上邊的直方圖你可以推斷出藍色曲線靠右側的最多(很明顯這些就是天空)...

    matplotlib繪制直方圖

    頻次直方圖的簡單入門   繪制二維直方圖參考 https://blog.csdn.net/jasonzhoujx/article/details/81772846 具體參數詳解 https://www.sohu.com/a/195391558_654419 ...

    Matlab 直方圖繪制

    1.直方圖畫法 bar(垂直圖) barh(水平圖) stacked(嵌入) grouped(族群) eg. 2.改變matlab坐標軸刻度 改變后圖像為 最后加入x,y軸的標簽...

    matplotlib繪制簡單直方圖

    matplotlib繪制簡單直方圖 結果圖...

    matplotlib繪制直方圖

    matplotlib繪制直方圖...

    猜你喜歡

    Matplotlib之直方圖繪制

    1 直方圖介紹 直方圖由一系列高度不等的縱向條紋或線段表示數據分布情況,一般用橫軸表示數據范圍,縱軸表示分布情況。 特點: 繪制連續性的數據,展示一組或者多組數據的分布情況(統計)。 2 直方圖繪制 直方圖通過hist()函數繪制 • plt.hist(x, bins=None) # 繪制以x為數值,bins為組數,組數 = 極差/組距 示例: 某地區連續50年中四月份平均氣溫數據如下:...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    精品国产乱码久久久久久蜜桃不卡