2012-01-11 2 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. В настоящее время я запускаю OpenCV v2.3.1, установленный через MacPorts.

Спасибо!

ответ

7

Я нашел онлайн-документацию немного разреженной для интерфейса Python. Один ресурс, который я нахожу неоценимым, - это образцы (OpenCV-2.3.x/samples/python2), в которых вы можете найти пример использования почти всех функций в интерфейсе Python.

Однако, глядя на документации:

  • mask аргумент должен быть 8-бит (mask.astype('uint8'))
  • вход img должно быть CV_8U или CV_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 довольно спокойно говорит о том, что он устанавливает. В конце концов, я понял, что вместо решения OpenCV было бы проще и проще использовать 'numpy.histogram'. – duckworthd

+0

У меня была такая же проблема. Аргумент «диапазоны», не являющийся плоским списком, был для меня проблемой. – UXkQEZ7

Смежные вопросы