2012-01-11 35 views
2

試圖用cv2.calcHist()與calcHist曖昧異常OpenCV中

>>> img 
array([ 1., 2., 3., 4., 5.]) 
>>> cv2.calcHist([img], channels = [0], mask = np.ones(img.size), histSize = [6], ranges = [(0,6)]) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
SystemError: error return without exception set 

的錯誤是很通用,我絕對不知道有什麼可以去錯了的方式,當我已經得到了以下明確的錯誤。您可以找到記錄的功能here。我目前正在通過MacPorts安裝OpenCV v2.3.1。

謝謝!

回答

7

我發現Python接口的在線文檔有點稀疏。 我發現一個非常寶貴的資源是樣本(OpenCV-2.3.x/samples/python2),其中您可以找到Python界面中幾乎所有函數的使用示例。

然而在尋找的文檔:

  • mask參數必須是8位(mask.astype('uint8')
  • 輸入imgCV_8UCV_32F(以便img.astype('uint8')img.astype('float32')

並從看python2樣品(camshift.py,color_histogram.py ):

  • ranges說法並不需要是一個元組,只是一個列表(儘管文件表明,它應該是列表或數組的數組列表...)

所以:

cv2.calcHist([img.astype('float32')],     # <-- convert to float32 
       channels=[0], 
       mask=np.ones(img.size).astype('uint8'), # <-- convert to uint8 
       histSize=[6], 
       ranges=[0,6])       # <-- flat list 
+0

我沒有意識到有例子! MacPorts對安裝的內容非常安靜。最後,我意識到使用'numpy.histogram'而不是OpenCV的解決方案會更快更簡單。 – duckworthd 2012-01-12 12:32:08

+0

我有同樣的問題。 「範圍」參數不是一個簡單的列表對我來說是個問題。 – UXkQEZ7 2014-05-10 13:07:49