RGB? BGR? Image. open VS cv2.imread

Image. open

Image open和show默认读取通道顺序RGB

#导入需要的包
from PIL import Image
import numpy as np
import cv2
import matplotlib.pyplot as plt
#读入图片
im = Image.open('1_1.png')
im.show()
#此时im是PIL类型,颜色通道是RGB im <PIL.PngImagePlugin.PngImageFile image mode=RGB size=768x768 at 0x257BDB16A58>

结果展示

RGB? BGR? Image. open VS cv2.imread_第1张图片
读入图片通常需要后续操作

#将im的PIL类型改为numpy,一个矩阵想要生成图片时,其类型必须是uint8
im = np.array(im, dtype=np.unit8)
#或im = np.array(im).astype(np.uint8)

cv2.imread

cv2. read默认读取通道顺序是BGR,而非RGB,彩色字体教程参见Link
但是读入BGR不影响 cv2. imshow,cv2. imshow 依旧是RGB

im = cv2.imread('1_1.png')
cv2.imshow('image', im)
cv2.waitKey()
cv2.destroyAllWindows()

结果展示

RGB? BGR? Image. open VS cv2.imread_第2张图片
配套使用,展示结果均为正常图像

混合使用,颜色通道顺序会有所变动

1. 用Image. open读取 cv2.imshow()展示

Image.open读入的通道顺序是RGB
cv2.imshow()读入的通道顺序是BGR
因此最终显示图像异常

im = Image.open('1_1.png')
im = np.array(im).astype(np.uint8)
cv2.imshow('PIL_cv BGR', im)
cv2.waitKey()

结果展示

2. 用cv2.read读取 plt.imshow()展示

cv2.read读入的通道顺序是BGR
plt读入的通道顺序是RGB
因此最终显示图像异常

im = cv2.imread('1_1.png')
im = np.array(im).astype(np.uint8)
plt.imshow(im)
plt.title("cv_plt BGR")
plt.show()

结果展示
RGB? BGR? Image. open VS cv2.imread_第3张图片

混合使用也不慌,改动颜色通道顺序即可

1.用Image. open读取 cv2.imshow()展示,改进方法
从输入的角度
将读入的RGB换序为BGR
cv2.imshow() ‘负负得正’,最终显示RGB

im = Image.open('1_1.png')
im = np.array(im).astype(np.uint8)[:, :, ::-1]
#或者im = np.array(im).astype(np.uint8)[:, :, [2, 1, 0]]
cv2.imshow('PIL_cv RGB', im)
cv2.waitKey()

结果展示

从输出的角度
原来的输出是BGR,将其改为RGB

im = Image.open('1_1.png')
im = np.array(im).astype(np.uint8)
cv2.imshow('PIL_cv RGB', im[:, :, ::-1])
#或cv2.imshow('PIL_cv RGB', im[:, :, [2, 1, 0]])
cv2.waitKey()

2.用cv2.read读取 plt.imshow()展示,改进方法
从输入的角度
将读入的BGR换序为RGB

im = cv2.imread('1_1.png')
im = np.array(im).astype(np.uint8)[:, :, ::-1]
#或im = np.array(im).astype(np.uint8)[:, :, [2, 1, 0]]
plt.imshow(im)
plt.show()

结果展示
RGB? BGR? Image. open VS cv2.imread_第4张图片
从输出的角度
原来的输出是BGR,将其改为RGB

im = cv2.imread('1_1.png')
im = np.array(im).astype(np.uint8)
plt.imshow(image[:, :, ::-1])
#或plt.imshow(image[:, :, [2, 1, 0]])
plt.show()

结果展示
RGB? BGR? Image. open VS cv2.imread_第5张图片

你可能感兴趣的:(python,opencv,numpy)