2013-04-05 63 views
3

我想計算python中Cielab圖像的3D直方圖。我正在使用openCV來計算我的直方圖。我想使用openCV的compareHist函數比較圖像,這就是爲什麼我使用openCV來計算我的圖像的3D直方圖。如何使用打開的CV計算python中的3D直方圖

我試着用以下變量:

i_lab = image.copy() 
i_lab = i_lab.astype(np.uint8) 
Range_hist = [[0, 100], [-100, 100], [-100, 100]]  
hist_1 = cv2.calcHist([i_lab], [[0], [1], [2]], None, [[20], [20], [20]], Range_hist) 

但它給錯誤SystemError: error return without exception set 請告訴我,我究竟做錯了,是否有可能在python

+0

我在使用numpy庫生成的直方圖上使用了'compareHist'函數,所以我不需要上面的函數來計算我的直方圖了。 – Khushboo 2013-04-10 12:21:26

回答

4

我使用的OpenCV來計算三維直方圖在嘗試製作HSV圖像的3D直方圖時碰到了這個問題,並且遇到了同樣的錯誤。事實證明,OpenCV documentation讓我們誤入歧途。這些文檔是爲C++ API編寫的,因此只能用作Python cv2 API的模糊指南(儘管我發現這些文檔對C++有些誤導)。

函數簽名如下:

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist 

關鍵的一點是,channelshistSizeranges參數應平整列表,而不是在你的榜樣嵌套列表。嘗試以下,假設i_lab是一個三通道圖像:

range_hist = [0, 100, -100, 100, -100, 100] 
hist_1 = cv2.calcHist([i_lab], [0, 1, 2], None, [20, 20, 20], range_hist) 

對於一個更完整的示例,則嘗試從opencvpython blogthis code listing