herrDeng網內搜尋

自訂搜尋

Ads

2021年4月1日 星期四

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

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

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

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章