2015-05-19 151 views
0

我正在一個項目中,我想從給定的圖像中獲得自定義直方圖。Python Opencv顏色範圍直方圖

比方說,我想算的三種顏色的像素數:

  1. 淺棕色。
  2. 藍色。
  3. 紅色。

我發現很容易計算匹配混合顏色的像素,但我想給顏色一個閾值,這是我的問題。

我怎樣才能做一個好門檻,將反映幾乎淺棕色或紅色的差不多,等...

感謝。

回答

0

我發現了一個非常好的方法來解決我的問題:

  1. LAB colorspace是一個很好的色彩空間進行比較的顏色。
  2. 方差公式的差異。

示例代碼:

red_bgr = (0,0,255) # red pixel 
pixel = (2,2,245) # pixel to compare 
red_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB) 
pixel_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB) 
deltaE = sqrt(abs(red_lab[0] - pixel_lab[0])**2 + 
       abs(red_lab[1] - pixel_lab[1])**2 + 
       abs(red_lab[2] - pixel_lab[2])**2) 
     ) 

像素具有最低的DeltaE是最感知相似於比較的顏色。

有了這個,很容易根據我想要計算的顏色建立直方圖。

1

這是所有關於你的分檔

here

分檔:以上直方圖顯示的每個像素值的像素數,即從0到255,即需要256個值,顯示以上直方圖。但是請考慮,如果您不需要分別查找所有像素值的像素數量,但是像素值的間隔中的像素數量是多少?例如,您需要找到位於0到15之間,然後是16到31,...,240到255之間的像素數。您將只需要16個值來表示直方圖。這就是OpenCV教程中關於直方圖的例子。

的報價是指在所示的例子[1]

[1] - http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html#histogram-calculation

無論這些鏈接都值得通過,但有效的,你可以做的是設置了一些閱讀你想要的範圍的箱子,說淺褐色是1-15(我不知道實際值),那麼你可以爲你想要的顏色閾值。

+0

感謝您的回答GPPK,我發現你的鏈接相當有用,但是我的問題在於一個顏色的範圍,在灰度圖中很容易說從10到20強化色1從20到30色2等等,但是RGB顏色呢?我真的不知道如何爲給定的顏色應用閾值。 –