【问题标题】:Converting PNG to JPG in python在python中将PNG转换为JPG
【发布时间】:2020-05-19 17:39:28
【问题描述】:

我正在尝试比较两张图片,一张是.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()

【问题讨论】:

  • 请分享整个错误信息。你没有minimal reproducible example吗?其中一个答案指出,您似乎在混合使用多个图像处理库。你能澄清一下吗?

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


【解决方案1】:

在演示如何将图像从.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])

【讨论】:

    【解决方案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 数组中),然后执行所有必要的计算。

    【讨论】:

    • 当不在两张图片上转换和使用 skimage.measure.compare_ssim 时(应该几乎是完美的像素),我得到的值非常低,0.2-.4 范围左右。这就是为什么我认为我需要在使用 SSIM 之前进行转换。
    【解决方案3】:

    将文件夹中的所有.png转换为.jpg的Python脚本

    import cv2 as cv
    import glob
    import os
    import re
    
    png_file_paths = glob.glob(r"*.png")
    for i, png_file_path in enumerate(png_file_paths):
        jpg_file_path = png_file_path[:-3] + "jpg";
       
        # Load .png image
        image = cv.imread(png_file_path)
    
        # Save .jpg image
        cv.imwrite(jpg_file_path, image, [int(cv.IMWRITE_JPEG_QUALITY), 100])
    
        pass
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-26
      • 2011-06-07
      • 2012-01-25
      • 2012-06-01
      • 1970-01-01
      • 2015-10-06
      • 2018-12-15
      • 2012-12-26
      相关资源
      最近更新 更多