在 OpenCV 中从一维浮点数组计算直方图

发布于 2024-11-03 05:36:18 字数 498 浏览 4 评论 0原文

我想创建直方图并使用 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)

I want to create histogram and calculate it using opencv method cv.CalcHist. But my data is one-dimensional arrays instead of IplImage objects. Why does the following code produce zero histogram?:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伴随着你 2024-11-10 05:36:18

上面的代码抛出异常(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.]]

Your code above throws an exception (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

Using np.float32 for angles and magnitude fixes the problem:

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.]]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文