2013-03-01 64 views
2

我使用openCV for Python,cv2庫。我用下面的函數來計算的圖像的直方圖im_converted使用openCV for python的背投影

hist = cv2.calcHist([im_converted], channels, None, histSize, ranges,hist, 1) 

其中im_converted加載爲類型UINT8的numpy的陣列。

hist似乎被迫成爲float32類型的一個numpy數組。當我使用反投影功能時會出現問題。 (注:我標準化直方圖s.t np.sum(歷史)= 1)

backProj = cv2.calcBackProject([im_converted], channels, hist, ranges,scale); 

該文檔是here。 backProj被迫成爲一個uint8 numpy數組。

  • 如果比例= 1,則backProj = 0
  • 如果標度= 255,那麼backProj是非零的,但這些值是非常小的。

我的問題是:鑑於類型之間的差異,應該應用的比例因子是多少?沒有改變類型的方法嗎? (注意:我試圖做hist =零(histSize,dtype = uint8),但這是不成功的,我仍然得到了一個float32直方圖。)

回答

3

這取決於您的圖像大小。如果您的圖像超過255個像素,那麼直方圖的uint8數據類型是不夠的,因爲分箱可能會過度流動。

看來OpenCV的線軍隊從calcBackProject返回的圖像的數據類型是相同的圖像中通過。如果你在一個uint8圖像通過,但你float32直方圖具有超過255個的反投影的圖像可能會被裁剪較大的值。

這樣做的最明智的辦法似乎是保持比例= 1.0,但通過在一個float32圖像0​​:

backProj = cv2.calcBackProject([im_converted.astype('float32')], channels, hist, ranges,scale)

另一種方法是在uint8圖像通過,但設置比例爲255./hist.max()。因此,背投影圖像中的255將對應最常用的顏色。