繁体   English   中英

如何在 Python 中将 PNG 转换为 JPG?

[英]How to convert PNG to JPG in Python?

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

AttributeError: 'tuple' object 没有属性 '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()

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

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

将文件夹中的所有 .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
    

只需使用 opencv 的 cvtColor。 假设使用 cv2.imread() 读取图像; 图像颜色通道排列为 BGR。

从 PNG 转换为 JPG

jpg_img = cv2.cvtColor(png_img, cv2.COLOR_RGBA2BGR)

从 JPG 转换为 PNG

png_img = cv2.cvtColor(jpg_img, cv2.COLOR_BGR2BGRA)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM