这几天debug发现cv2在处理图象时会自动将RGB格式的图像矩阵变为BGR格式。打个比方,如果用cv2保存一个RGB图像,再用其它图像处理的包(如PIL)打开,那么打开之后的图像就变为BGR格式了(第一个channel和第三个channel)翻转
测试代码
>>> import cv2
>>> import numpy as np
>>> p = np.zeros((1,1,3))
>>> p
array([[[0., 0., 0.]]])
>>> p[0][0][2]=1
>>> p
array([[[0., 0., 1.]]])
>>> cv2.imwrite('G:/Desktop/1.png',p)
True
>>> from PIL import Image
>>> np.array(Image.open('G:/Desktop/1.png'))
array([[[1, 0, 0]]], dtype=uint8)
>>> np.array(Image.open('G:/Desktop/1.png').convert('RGB'))
array([[[1, 0, 0]]], dtype=uint8)
PIL不支持直接将RGB图像转换为BGR
>>> np.array(Image.open('G:/Desktop/1.png').convert('BGR'))
Traceback (most recent call last):
File "F:\Anaconda\lib\site-packages\PIL\Image.py", line 1015, in convert
im = self.im.convert(mode, dither)
ValueError: conversion from RGB to BGR not supporte
这里参考《python图像解析-RGB与BGR转换》查到了有两种方法将BGR图像转换回来,本质是将通道一和通道三再次翻转
>>> p[..., ::-1]
array([[[0, 0, 1]]], dtype=uint8)
>>> p[:,:,[2,1,0]]
array([[[0, 0, 1]]], dtype=uint8)
对您有用麻烦点个赞哦o( ̄▽ ̄)ブ