Конвертировать массив Numpy в изображение с помощью CV2 или PIL - PullRequest
0 голосов
/ 04 июня 2018

Я пытаюсь преобразовать свой массив в изображение, используя библиотеки CV2 или PIL. В обеих библиотеках я получаю изображения со смешанным цветом.

Именно так я и пытался преобразовать массив Numpy в изображениеиспользуя CV2:

   for i in range(len(batch_tx)):
        cls_pred = sess.run(y_pred_cls, feed_dict={x: batch_tx})
        cls_true = sess.run(tf.argmax(batch_ty, 1))
        img = cv2.resize(batch_tx[i], (FLAGS.img_size, FLAGS.img_size))
        img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2RGB)
        cv2.imwrite(
            './saveImage/img' + str(i) + ': ' + 'True: ' + str(cls_true[i]) + ', Pred:' +
            str(cls_pred[i]) + '.JPEG', img)

Вывод, как показано на рисунке ниже для всех моих изображений (Это изображение корабля)

enter image description here

И я также попробовал библиотеку PIL и получил тот же вывод.

batch_tx[1] - это массив первого изображения в моем наборе данных, и тип - numpy.ndarray с формой (96,96, 3)

Есть идеи?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

Большинство функций OpenCV работают только с изображениями BGR, а не с RGB, например, imshow или imwrite.OpenCV сделает всю работу за вас, чтобы правильно поставить его и сохранить как изображение JPG, которое может быть загружено ЛЮБОМ другим приложением.Если у вас есть другой заказ, то функция не узнает об этом и сохранит его с неправильным порядком.

Удаление этой строки:

img = cv2.cvtColor(img.astype(np.uint8), cv2.COLOR_BGR2RGB)

должно выполнить эту работу за вас.

Я предполагаю, что это также не в правильном формате (np.uint8), так как вы используете его в строке, которую я только что сказал вам удалить.Поэтому вы также должны изменить часть сохранения на:

cv2.imwrite(
            './saveImage/img' + str(i) + ': ' + 'True: ' + str(cls_true[i]) + ', Pred:' +
            str(cls_pred[i]) + '.JPEG', img.astype(np.uint8))

Теперь все должно работать.Эти изображения могут быть загружены в другой момент с PIL и любой другой библиотекой, и вы получите почти идентичные изображения (JPG - сжатие с потерями), если вы хотите идентичные, попробуйте сохранить их в другом формате, который имеет сжатие без потерь.

...