显示区别
plt.imread和PIL.Image.open读入的都是RGB顺序,而opencv中cv2.imread读入的是BGR通道顺序 。cv2.imread会显示图片更蓝一些。
以下代码为opencv imread和PIL库中image.open读入图像颜色顺序的比较
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import cv2
import numpy as np
from PIL import Image
path="/Users/waldenz/Documents/Work/doc/TestImages/c1.jpeg"
img1 = cv2.imread(path, 3)
img2 = Image.open(path)
img2 = np.asarray(img2)
plt.subplot(121)
plt.imshow(img1)
plt.subplot(122)
plt.imshow(img2)
# plt.figure()
plt.show()
左侧为原图,右侧为代码运行结果图。
格式互相转换
以上面牛头梗的狗狗图片作为原图,展示两种格式间的转换
def PILImageToCV():
# PIL Image转换成OpenCV格式
path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png"
img = Image.open(path)
plt.subplot(121)
plt.imshow(img)
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
plt.subplot(122)
plt.imshow(img)
plt.show()
def CVImageToPIL():
# OpenCV图片转换为PIL image
path = "/Users/waldenz/Documents/Work/doc/TestImages/t3.png"
img = cv2.imread(path)
# cv2.imshow("OpenCV",img)
plt.subplot(121)
plt.imshow(img)
img2 = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
plt.subplot(122)
plt.imshow(img2)
plt.show()
第一组为PIL Image和转换后的opencv格式; 第二组为opencv读取的原图在matplotlib中的展示,和转换为PIL Image后的展示
判断图像数据是否是OpenCV格式
即判断image是否为numpy的ndarray数据类型
isinstance(img, np.ndarray)