Неверно переписывается изображение OpenCV python
Разбираюсь с обработкой изображений на python с OpenCV. Возникла следующая проблема: Если я просто перекладываю массив изображения в новый массив, то изображение сильно высветляется. Как будто я пишу туда только белые пиксели. Вот код:
import cv2 as cv
import numpy as np
img = cv.imread("test1.png")
print(img.shape)
line, row = img.shape[:2]
new_img = np.zeros([line, row, 3])
i = 0
while i < line:
j = 0
while j < row:
new_img[i, j, 0] = img[i, j, 0]
new_img[i, j, 1] = img[i, j, 1]
new_img[i, j, 2] = img[i, j, 2]
j += 1
i += 1
cv.imshow("Image", new_img)
cv.waitKey(0)
cv.destroyAllWindows()
в качестве входного изображения я подаю просто серый прямоугольник размера 19х21. Но при выводе new_img получаю белый прямоугольник.
Судя по отладчику, массив переписывается верно. (заранее прошу прощение если что-то назвал не своими именами, в мире python недавно)
Ответы (1 шт):
Разобрался. При создании массива np.zeros([line, row, 3]) ячейка массива создается с типом numpy.float64. Но пиксели изображения имеют формат 8 битного беззнакового целого числа, то есть numpy.uint8 .
Необходимо сделать приведение типа:
new_img = new_img.astype(np.uint8)