使用小数进行缩放时,图像无法正确显示

时间:2016-03-05 15:54:48

标签: python opencv numpy

我正在使用OpenCV来阅读和显示图像。我正在尝试进行标量乘法,但两种类似方法的显示方式却截然不同:

img = cv2.imread('C:/Python27/user_scripts/images/g1.jpg', -1)
cv2.imshow('img_scaled1', 0.5*img)
cv2.waitKey(0)
cv2.imshow('img_scaled2', img/2)
cv2.waitKey(0)

在第一种情况下,几乎没有显示任何内容。第二种情况正常。 在我看来,imshow()不支持numpy数组浮点数。

我想使用第一种方法。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

使用图像时有很多陷阱。这个似乎是一个类型问题。

imshow接受范围(0,256)中的uint8数组(排除256个),范围(0.0,1.0)中的float数组。执行a=a*.5时,浮点数组超出范围,因此不保证结果。

解决方案是通过以下方式将数组转换为uint8类型:

imshow((a*.5).astype(np.uint8))

imshow((a*.5).astype('uint8'))