记cv2的一个大坑:自动将RGB图像转为BGR图像(自动将第一个通道和第三个通道翻转)

这几天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( ̄▽ ̄)ブ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值