@Touchme

Как переписать изображение 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 недавно)
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@Touchme Автор вопроса
Разобрался. При создании массива np.zeros([line, row, 3]) ячейка массива создается с типом numpy.float64. Но пиксели изображения имеют формат 8 битного беззнакового целого числа, то есть numpy.uint8 .
Необходимо сделать приведение типа:
new_img = new_img.astype(np.uint8)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы