2016-03-05 34 views
0

我正在使用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

通常这样的问题是一个类的问题。可以'imshow((im * .5).astype(uint8))'解决它? –

+1

@ B.M。与小改动合作,'imshow((im * .5).astype('uint8'))' 解决了它。谢谢! – chetan

+0

@ B.M。你应该提交答案 –

回答

0

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

imshow接受uint8阵列的范围(0,256)(256除外)和float阵列的范围(0.0,1.0)。在做a=a*.5时,你的float数组超出范围,所以不保证结果。

一种解决方案是通过投阵列中的uint8类型:

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

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