Расчет гистограммы по одномерным массивам с плавающей точкой в ​​OpenCV - PullRequest
2 голосов
/ 25 апреля 2011

Я хочу создать гистограмму и рассчитать ее, используя opencv метод cv.CalcHist. Но мои данные - это одномерные массивы вместо IplImage объектов. Почему следующий код выдает нулевую гистограмму?:

hist =  cv.CreateHist([3, 3], cv.CV_HIST_ARRAY, [[0, 1], [0, 1]])
angles, magnitudes = np.random.rand(100), np.random.rand(100)
cv.CalcHist([cv.GetImage(cv.fromarray(np.array([x]))) for x in [angles, magnitudes]], hist)
np.array(hist.bins)

>>> array([[ 0.,  0.,  0.],
>>>    [ 0.,  0.,  0.],
>>>    [ 0.,  0.,  0.]], dtype=float32)

1 Ответ

1 голос
/ 21 марта 2012

Ваш код выше вызывает исключение (opencv 2.3.1):

OpenCV Error: Unsupported format or combination of formats () in calcHist, file /usr/ports/graphics/opencv-core/work/OpenCV-2.3.1/modules/imgproc/src/histogram.cpp, line 632
Traceback (most recent call last):
  File "ocv.py", line 8, in <module>
cv.CalcHist([cv.GetImage(cv.fromarray(np.array([x]))) for x in [angles, magnitudes]], hist)
cv2.error

Использование np.float32 для углов и величины решает проблему:

hist =  cv.CreateHist([3, 3], cv.CV_HIST_ARRAY, [[0, 1], [0, 1]])
angles =np.random.rand(100).astype(np.float32)     
magnitude = np.random.rand(100).astype(np.float32)
cv.CalcHist([cv.GetImage(cv.fromarray(np.array([x]))) for x in [angles, magnitudes]], hist)
print np.array(hist.bins)

...

[[ 11.   9.   7.]
 [ 10.  11.  15.]
 [ 11.  14.  12.]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...