您的位置首页百科问答

matplotlib和opencv的保存图片比较(python)

matplotlib和opencv的保存图片比较(python)

的有关信息介绍如下:

matplotlib和opencv的保存图片比较(python)

本文,比较一下matplotlib和opencv在保存图片方面的区别。

给出下面的图片。

用opencv读图,得到的数组只能是整数类型的数据。

import cv2

pic=cv2.imread('0000.jpg')

print(pic)

opencv保存图片的时候,如果把所有的像素值全部转化为0到1之间的浮点数,就只能得到近乎黑色的图片。

import cv2

pic=cv2.imread('0000.jpg')

cv2.imwrite('001.jpg',pic/255)

这是因为,图像的亮度降低了255倍。

matplotlib读图:

import matplotlib.image as pm

img=pm.imread('0000.jpg')

print(img)

得到一个四通道的数据,里面的前三个通道的数据也和opencv读取的不一样。

matplotlib保存图片,如果数据都位于0到1之间,也能够得到清晰的图片。

import matplotlib.image as pm

img=pm.imread('0.jpg')

pm.imsave('00.jpg',img/255)

这和步骤3里面的效果形成鲜明对比。

opencv保存图片,可以保存任意正数范围内的数据类型,数据越大,代表像素的亮度越大。

import cv2

pic=cv2.imread('0.jpg')

cv2.imwrite('01.jpg',pic/2)

而matplotlib就不行,如果数据类型是浮点数,就必须保证数据介于0到1之间。

import matplotlib.image as pm

img=pm.imread('0.jpg')

pm.imsave('00.jpg',img/2)

给出下面的图片,这是一张三通道的RGB图片。

最初,用matplotlib和opencv读图,都可以证明这是三通道图:

另存之后,会发现,matplotlib把图像保存成了4通道图像,而opencv仍旧保存为三通道图像。

注意,保存格式都是jpg格式。

真正令人费解的是,opencv读取四通道的jpg图的时候,得到的却是3通道数组。