我正在尝试比较两张图片,一张为.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()
答案 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数组表示),然后执行所有必要的计算。