Неверно переписывается изображение 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 шт):

Автор решения: Danil

Разобрался. При создании массива np.zeros([line, row, 3]) ячейка массива создается с типом numpy.float64. Но пиксели изображения имеют формат 8 битного беззнакового целого числа, то есть numpy.uint8 . Необходимо сделать приведение типа: new_img = new_img.astype(np.uint8)

→ Ссылка