在python中将PNG转换为JPG

时间:2020-02-03 22:40:20

标签: python image opencv image-processing scikit-image

我正在尝试比较两张图片,一张为.png,另一张为.jpg。因此,我需要将.png文件转换为.jpg,以获得更接近SSIM的值。以下是我尝试过的代码,但出现此错误:

AttributeError:“元组”对象没有属性“ 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 个答案:

答案 0 :(得分:7)

在演示如何将图像从.png转换为.jpg格式之前,我想指出您在使用的库上应该保持一致。当前,您正在将scikit-image与opencv混合。最好选择一个库并坚持使用它,而不是使用scikit读取图像,然后使用opencv转换为灰度。

要使用OpenCV将.png转换为.jpg图像,可以使用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])

答案 1 :(得分:2)

函数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数组表示),然后执行所有必要的计算。