使用openCV for python返回投影

时间:2013-03-01 16:13:23

标签: python opencv histogram

我正在使用openCV for Python,即cv2库。我使用以下函数来计算图像的直方图im_converted

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

其中im_converted作为uint8类型的numpy数组加载。

hist似乎被迫成为float32类型的numpy数组。使用反投影功能时会出现问题。 (注意:我将直方图规范化为s.t np.sum(hist)= 1)

backProj = cv2.calcBackProject([im_converted], channels, hist, ranges,scale);

文档为here。 backProj被迫成为一个uint8 numpy数组。

  • 如果scale = 1,则backProj = 0
  • 如果scale = 255则backProj不为零,但值非常小。

我的问题是:鉴于类型之间的差异,应该应用的比例因子是多少?是不是有办法改变类型? (注意:我试过做hist = zeros(histSize,dtype = uint8),但这不成功,我最后还是得到了一个float32直方图。)

1 个答案:

答案 0 :(得分:3)

这取决于您的图像尺寸。如果您的图像有超过255个像素,那么直方图的uint8数据类型是不够的,因为这些垃圾箱可能会溢出。

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

最明智的做法是保持比例= 1.0,但将float32图片传递给calcBackProject

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

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