Меняется ли значение, если я изменяю массив numpy на список, а затем меняю список на массив numpy? - PullRequest
1 голос
/ 19 апреля 2020

Я хочу создать такую ​​программу.

  1. Сначала преобразуйте файл изображения в массив numpy.

  2. Switch преобразованный массив numpy в список.

  3. Сохраните список в текстовом файле (потому что, если программа сохраняет массив numpy в текстовом файле как есть, середина часть введена опущена).

  4. Вызов списка, сохраненного в текстовом файле, и преобразование списка в массив numpy.

  5. Сохраните массив numpy как изображение.

Итак, я написал код и выполнил его, но результат получился, как показано ниже.

введите изображение описание здесь

↑ Это оригинальный файл изображения

введите описание изображения здесь

↑ Это преобразованный файл изображения

Итак, чтобы найти проблему, я написал код следующим образом.

import cv2 as cv
import numpy as np
from PIL import Image

imgArr = cv.imread("salmon.jpg", cv.IMREAD_COLOR)
s = np.array(imgArr).tolist()
t = np.array(s)
img1 = Image.fromarray(t, "RGB")
img2 = Image.fromarray(imgArr, "RGB")
img1.save("ex.png")
img2.save("ex2.png")

Изображение (ex.png) нарушается, когда программа dr aws создает файл изображения с преобразованным массивом numpy из списка, но массив numpy, который не переключается на список, имеет хорошую картинку (ex2.png).

Я думаю, что они оба находятся в одном массиве numpy, но почему они создают файлы изображений с разными результатами?

1 Ответ

0 голосов
/ 19 апреля 2020

Когда вы меняете данные с numpy array на list, тип данных меняется с uint8 на uint32. Поэтому, когда вы конвертируете list обратно в numpy array, вам нужно указать datatype как uint8.

import cv2 as cv
import numpy as np
from PIL import Image

imgArr = cv.imread("salmon.jpg", cv.IMREAD_COLOR)

s = np.asarray(imgArr).tolist()
t = np.array(s, dtype="uint8")
img1 = Image.fromarray(imgArr, "RGB")
img2 = Image.fromarray(t, "RGB")
img1.save("ex.png")
img2.save("ex2.png")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...