简单介绍
主要是因为经常用到这两个,经常弄混淆,所以,总结一番。持续更新。
from PIL import Image
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
1、读取文件与写入文件
1.1 Image.open()
img_pil = Image.open(fp[, mode, formats])
1.2 cv.imread()
img_cv = cv2.imread(fp[,flags])
fp是所要读的图像的路径名
flags是加载图像的方式,主要有以下三种:(可以写数字,也可写前面的英文字符串)
cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道,可以直接写1。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。
cv2.IMREAD_UNCHANGED:读入完整图片,包括alpha通道,可以直接写-1
cv.imread读取完图片后,是以BGR的顺序存储图片颜色通道的。但是plt.imshow此时是直接输出存储的后的文件,所以输出是图片的通道顺序就变成BGR了,而不是原图片的RGB形式。暂时可以不用解决显示的问题。
1.3 img_PIL.save()
save_path = '02.jpg'
image_pil.save(save_path)
1.4 cv.imwrite()
save_path = '03.jpg'
cv.imwrite(save_path,img_cv) # 保存后,颜色从BGR转回RGB
2、数据类型与两者转换
PIL.Image读取的类型是PIL.PngImagePlugin.PngImageFile 类型
而cv读取与处理的是numpy.ndarray类型
两者之间可以相互转换
img_PIL = Image.fromarray(img_cv)
img_cv = np.asarray(img_PIL)
2.1 PIL.Image 转ndarray
注意颜色通道是rgb,如果用cv的话,会默认为bgr
2.2 ndarray转Image
注意,此时的颜色通道
3、属性
3.1 img_pil的形状
注意此处是,先列后行
3.2 img_cv的形状
如果读入的是灰度图像,则只有行和列
3.3 img_pil获取与修改像素点
3.4 img_cv获取与修改像素点
完整代码同步更新
here