这篇文章主要讲解了如何比较和相互转换PIL.Image.open和cv2.imread,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。

摘要

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 cv2from PIL import ImageimagePath='4.jpg'import matplotlib.pyplot as pltcvImage=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 Imageimport numpy as npimagePath='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有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。