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通道数组。



