2016-03-05 39 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'))