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

nr9pn0ug  于 2022-11-24  发布在  Python
关注(0)|答案(4)|浏览(363)

我尝试比较两个图像,一个是.png,另一个是.jpg。所以我需要将.png文件转换为.jpg,以便为SSIM获得更接近的值。下面是我尝试的代码,但我得到了以下错误:
属性错误:'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()
mefy6pfw

mefy6pfw1#

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

oug3syen2#

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

hsgswve4

hsgswve43#

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

n1bvdmb64#

简单地使用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)

相关问题