Преобразование PNG в JPG в python - PullRequest
       19

Преобразование PNG в JPG в python

0 голосов
/ 04 февраля 2020

Я пытаюсь сравнить два изображения: одно .png, а другое .jpg. Поэтому мне нужно преобразовать файл .png в .jpg, чтобы получить более близкие значения для SSIM. Ниже приведен код, который я пробовал, но я получаю эту ошибку:

AttributeError: у объекта 'tuple' нет атрибута 'dtype'

image2 = imread(thisPath + caption)
image2 = io.imsave("jpgtest.jpg", (76, 59))
image2 = cv2.cvtColor(image2, cv2.COLOR_BGR2GRAY)
image2 = resize(image2, (76, 59))
imshow("is it a jpg", image2)
cv2.waitKey()

Ответы [ 2 ]

5 голосов
/ 04 февраля 2020

Прежде чем продемонстрировать, как преобразовать изображение из формата .png в .jpg, я хочу отметить, что вы должны быть последовательны в используемой вами библиотеке. В настоящее время вы смешиваете scikit-изображение с opencv. Лучше выбрать одну библиотеку и придерживаться ее вместо чтения изображения с помощью scikit, а затем преобразования в оттенки серого с помощью opencv.

Чтобы преобразовать изображение .png в .jpg с помощью OpenCV, вы можете использовать cv2.imwrite. Обратите внимание, что в формате .jpg или .jpeg, чтобы поддерживать высочайшее качество, вы должны указать значение качества из [0..100] (значение по умолчанию - 95). Просто сделайте это:

import cv2

# Load .png image
image = cv2.imread('image.png')

# Save .jpg image
cv2.imwrite('image.jpg', image, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
2 голосов
/ 04 февраля 2020

Функция skimage.io.imsave ожидает от вас имени файла и массива, который вы хотите сохранить под этим именем. Например:

skimage.io.imsave("image.jpg", image)

, где image - это массив numpy.

Здесь вы используете его неправильно:

image2 = io.imsave("jpgtest.jpg", (76, 59))

вы назначаете выход функции imsave в image2, и я не думаю, что это то, что вы хотите сделать.


Возможно, вам не нужно конвертировать изображение в JPG, потому что библиотека skimage уже обрабатывает все это преобразование самостоятельно. Обычно вы загружаете изображения только с помощью imread (не важно, являются ли они PNG или JPG, поскольку они представлены в массиве numpy), а затем выполняете все необходимые вычисления.

...