摘要
PIL.Image.open读入的是RGB顺序,而opencv中cv2.imread读入的是BGR通道顺序 。cv2.imread会显示图片更蓝一些。
cv2.imread(path,读取方式)方法
第一个参数是图片的路径。
第二个参数是读取方式:cv2.IMREAD_COLOR:读入一副彩色图片;cv2.IMREAD_GRAYSCALE:以灰度模式读入图片;cv2.IMREAD_UNCHANGED:读入一幅图片,并包括其alpha通道。
默认为cv2.IMREAD_COLOR。
返回值是(height,width,channel)数组,channel的顺序是BGR顺序。
例:
import cv2
from PIL import Image
imagePath='4.jpg'
import matplotlib.pyplot as plt
cvImage=cv2.imread(imagePath)
print(cvImage.shape)
plt.subplot(121)
plt.imshow(cvImage)
plt.show()
PIL.Image.open(path)方法
参数:图片的路径
返回值: <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=374x288 at 0x13EA15F7808>
需要用img=np.array(img)做转换,才能看到shape属性,是(height,width,channel)数组,channel的通道顺序为RGB。
例:
from PIL import Image
import numpy as np
imagePath='4.jpg'
import matplotlib.pyplot as plt
'''
cvImage=cv2.imread(imagePath)
print(cvImage.shape)
plt.subplot(121)
plt.imshow(cvImage)
plt.show()
'''
img=Image.open(imagePath)
img=np.array(img)
print(img.shape)
plt.imshow(img)
plt.show()
二者之间的相互转化
主要用到的函数cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
本例用到的格式是cv2.COLOR_RGB2BGR和cv2.COLOR_BGR2RGB
代码:
def PILImageToCV(imagePath):
# PIL Image转换成OpenCV格式
img = Image.open(imagePath)
plt.imshow(img)
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
plt.imshow(img)
plt.show()
def CVImageToPIL(imagePath):
# OpenCV图片转换为PIL image
img = cv2.imread(imagePath)
plt.imshow(img)
img2 = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.imshow(img2)
plt.show()
判断图像数据是否是OpenCV格式:
isinstance(img, np.ndarray)
到此这篇关于PIL.Image.open和cv2.imread的比较与相互转换的方法的文章就介绍到这了,更多相关PIL.Image.open和cv2.imread内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
您可能感兴趣的文章:解决python cv2.imread 读取中文路径的图片返回为None的问题升级keras解决load_weights()中的未定义skip_mismatch关键字问题浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别