Почему np.ones создает черное изображение? - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу понять, в чем разница между np.zeros и np.ones.В моем коде ниже оба создают черные изображения.Но какая польза от np.zeros и np.ones.Когда я должен их использовать.Какова цель.Я знаю np.ones заполнить матрицу 1, но какова цель.Что я хочу создать white image

img = np.ones((512,512,3), np.uint8)
cv2.imshow('IMG', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

img = np.zeros((512,512,3), np.uint8)
cv2.imshow('IMG', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Инициализируйте ваш массив как float тип данных.Только тогда 0 будет означать черный, а 1 будет означать белый:

img = np.ones((512,512,3), np.float)

Объяснение : Когда imshow получает массив целых чисел, он будет считать, что 0 является минимальным, а 255максимальное значение, представляющее черно-белое изображение в оттенках серого.Однако, если он получает массив с плавающей точкой, он устанавливает эти значения равными 0,0 и 1,0, поскольку предполагает масштабированный ввод.

0 голосов
/ 22 февраля 2019

Вам необходимо масштабировать по количеству бит в пикселе.Например,

img = 255*np.ones((512, 512, 3), uint8)

создаст белое изображение для 8-битных пикселей.

0 голосов
/ 22 февраля 2019

np.zeros "Вернуть новый массив заданной формы и типа, заполненный нулями."

np.ones "Вернуть новый массив заданной формы и типа, заполненный единицами."

np.zeros(10)
Out: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.ones(10)
Out:array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...