herrDeng網內搜尋

自訂搜尋

Ads

2021年4月1日 星期四

以黑柴犬為例python版opencv RGB equalizeHist與histogram

 
#以下為教學程式,因為是黑狗,採用Lab或HSV色彩空間equalize效果不好,顏色嚴重失真,用RGB各channel equalize效果還可以。使用了opencv的calcHist, split, equalizeHist, merge 以及 numpy的簡易統計函數與matplotlib.pyplot並自訂函數。

匯入套件
import cv2
import numpy as np
import matplotlib.pyplot as plt
opencv秀圖
im=cv2.imread('shiba_inu.jpg')
cv2.imshow('original',im)
cv2.waitKey(0)
cv2.destroyAllWindows()
用split分割channel
BGR=cv2.split(im)
color=('b','g','r')
計算不同色階的統計量,用numpy
def print_sta(i): 
    #都使用numpy的簡易統計函數
    print('==========\n',color[i],': min=', np.min(BGR[i]),',max=', np.max(BGR[i]),'\n') 
    print('mean=', np.mean(BGR[i]),',median=', np.median(BGR[i]), ', std=', np.std(BGR[i]),'\n')
處理與計算histogram,如果參數equalized==True就各色階equalizeHist
def histogram(equalized=False):
    for i in range(3): 
        if equalized==True:
           BGR[i]=cv2.equalizeHist(BGR[i]) 
        print_sta(i)
        # 計算直方圖每個 bin 的數值
        hist = cv2.calcHist(BGR, [i], None, [256], [0, 256])
        plt.plot(hist, color = color[i])
        plt.xlim([0, 256])
    plt.show()
再來就是要呼叫histogram(),各色階equalizeHist後的BGR重新merge
histogram()
histogram(True)
im2=cv2.merge(BGR)
在函數histogram採用opencv的calcHist(這就針對圖的channel資料),用numpy的histogram改寫看看使用廣!

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章