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

В 1-ом случае отображается почти ничего. 2-й корпус отлично работает. Мне кажется, что 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, у вас есть массив с плавающей точкой вне диапазона, поэтому никаких гарантий на результат.

Решение состоит в том, чтобы привести массив в uint8 типа с помощью:

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

или

imshow((a*.5).astype('uint8')) 
Смежные вопросы