duanyuqi987 / YAJUNblog

用Issue写博客,记录学习内容,方便记录.
1 stars 0 forks source link

PIL和CV图像读入方式差异 #15

Open duanyuqi987 opened 4 years ago

duanyuqi987 commented 4 years ago

plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。其保存格式也是BGR因此保存的图像显示为偏蓝色一些。

duanyuqi987 commented 4 years ago

Image.open()函数只是保持了图像被读取的状态,但是图像的真实数据并未被读取,因此如果对需要操作图像每个元素,如输出某个像素的RGB值等,需要执行对象的load()方法读取数据。

对于Image.open()函数默认真彩图像读取通道顺序为RGB,而cv2.imread()则是BGR。同时,当图像格式为RGBA时,Image.open(‘---.jpg’)读取的格式为RGBA(其中A表示图像的alpha通道,即RGBA共四个通道),而cv2.imread('---.jpg')读取的格式是BGR,只有三个通道。

duanyuqi987 commented 4 years ago

PIL.Image转换成OpenCV格式

import cv2
from PIL import Image
import numpy

image = Image.open("plane.jpg")
image.show()
img = cv2.cvtColor(numpy.asarray(image),cv2.COLOR_RGB2BGR)
cv2.imshow("OpenCV",img)
cv2.waitKey()

OpenCV转换成PIL.Image格式

import cv2
from PIL import Image
import numpy

img = cv2.imread("plane.jpg")
cv2.imshow("OpenCV",img)
image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
image.show()
cv2.waitKey()