#以下為教學程式,因為是黑狗,採用Lab或HSV色彩空間equalize效果不好,顏色嚴重失真,用RGB各channel equalize效果還可以。使用了opencv的calcHist, split, equalizeHist, merge 以及 numpy的簡易統計函數與matplotlib.pyplot並自訂函數。
import cv2 import numpy as np import matplotlib.pyplot as pltopencv秀圖
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改寫看看使用廣!
沒有留言:
張貼留言