使用opencvforpython的反投影

2024-06-16 13:15:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是opencvforpython,cv2库。我用下面的函数来计算图像的直方图

hist = cv2.calcHist([im_converted], channels, None, histSize, ranges,hist, 1)

其中im\u converted作为uint8类型的numpy数组加载。在

hist似乎被迫成为float32类型的numpy数组。当我使用反投影函数时出现了一个问题。(注:我规范化直方图s.tnp.总和(历史)=1)

^{pr2}$

文档是here。backProj被强制为uint8 numpy数组。在

  • 如果scale=1,则backProj=0
  • 如果scale=255,那么backProj不是零,但是值非常小。在

我的问题是:考虑到类型之间的差异,应该应用什么样的比例因子?难道没有办法改变类型吗?(注意:我试着做hist=0(histSize,dtype=uint8),但没有成功,最后还是得到了float32直方图。)


Tags: 函数numpy类型数组直方图cv2histconverted
1条回答
网友
1楼 · 发布于 2024-06-16 13:15:35

这取决于您的图像大小。如果图像的像素超过255,那么直方图的uint8数据类型是不够的,因为容器可能会流动。在

OpenCV行似乎强制从calcBackProject返回的图像的数据类型与传入的图像相同。如果传入uint8图像,但float32直方图的值大于255,则可能会剪裁反投影图像。在

最明智的方法似乎是保持scale=1.0,但将float32图像传递给calcBackProject

backProj = cv2.calcBackProject([im_converted.astype('float32')], channels, hist, ranges,scale)

另一种方法是传入uint8图像,但将比例设置为255. / hist.max()。因此,255在你的反投影图像将对应于最常见的颜色。在

相关问题 更多 >