[英]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.