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 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()

tt.png

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()


tt.png

tt.png

二者之间的相互转化

主要用到的函数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()


目录
相关文章
|
计算机视觉
Emgu.CV 报错 Emgu.CV.Util.CvException: OpenCV
Emgu.CV 报错 Emgu.CV.Util.CvException: OpenCV 异常信息:Emgu.CV.Util.CvException: OpenCV: 在 Emgu.CV.CvInvoke.CvErrorHandler(Int32 status, IntPtr funcName, IntPtr errMsg, IntPtr fileName, Int32 line, I...
156 1
|
2月前
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
155 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
4月前
|
存储 计算机视觉
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
OpenCV 中 CV_8UC1,CV_32FC3,CV_32S等参数的含义
220 3
|
6月前
|
计算机视觉
【已解决】cv2.imread读取中文名称图片报错或者无法保存中文名图片:使用cv2.imdecode与cv2.imencode解决
【已解决】cv2.imread读取中文名称图片报错或者无法保存中文名图片:使用cv2.imdecode与cv2.imencode解决
|
7月前
|
计算机视觉
cv2.putText
cv2.putText
443 1
|
7月前
|
计算机视觉 Python
cv2.polylines
cv2.polylines
288 1
|
计算机视觉
cv::imread读取文件失败
cv::imread读取文件失败
|
计算机视觉
13.【openCV_imread()函数详解】
13.【openCV_imread()函数详解】
76 0
|
编解码 算法 计算机视觉
【CV】PIL.Image.save() 保存图片压缩问题
PIL.Image.save() 保存图片压缩问题