我使用的是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数组。在
我的问题是:考虑到类型之间的差异,应该应用什么样的比例因子?难道没有办法改变类型吗?(注意:我试着做hist=0(histSize,dtype=uint8),但没有成功,最后还是得到了float32直方图。)
这取决于您的图像大小。如果图像的像素超过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在你的反投影图像将对应于最常见的颜色。在相关问题 更多 >
编程相关推荐