Python cv2 imwrite() - RGB 或 BGR

问题描述 投票:0回答:1

opencv 在 python 中的工作原理令人困惑。我知道

cv2.imread()
假设图像位于 BGR 中。但是,当我使用
cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
将图像从 BGR 转换为 RGB,并尝试保存图像然后使用
PIL
读取它时,颜色会反转。

上下文:我正在构建一个ROS管道,我必须使用opencv ROS桥来获取图像作为rostopic,然后使用PIL转换图像。

请参考以下代码及输出图片:

import numpy as np
from matplotlib import pyplot as plt
from PIL import Image as im

image1 = cv2.imread('/home/ali/Pictures/rgb.png' )
image2 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)
cv2.imwrite('/home/ali/Pictures/test_img_bgr_cv.png', image2)
image3 = im.open('/home/ali/Pictures/test_img_bgr_cv.png')

plt.figure(figsize=(10, 10))
plt.subplot(1, 3, 1), plt.imshow(image1)
plt.title('Image 1'), plt.xticks(\[\]), plt.yticks(\[\])

plt.subplot(1, 3, 2), plt.imshow(image2)
plt.title('Image 2'), plt.xticks(\[\]), plt.yticks(\[\])

plt.subplot(1,3,3), plt.imshow(image3)
plt.title('Image 3'), plt.xticks(\[\]), plt.yticks(\[\])

plt.show()

output image

python-3.x opencv python-imaging-library ros robotics
1个回答
0
投票

实际上似乎对

cv2.imread()
存在误解,cv2 以 BGR 格式读取图像,是的,但是当提示保存图像或使用
cv2.imshow
显示图像时,它会正确渲染它们,问题部分出在 matplotlib 中。因为cv2使用BGR颜色格式,而matplotlib使用RGB颜色格式。

所以本质上做的是:

  1. 在 BGR 中加载图像
  2. 将图像转换为RGB
  3. 另存为 RGB。
  4. 再次加载为BGR
  5. 用 matplotlib 反转查看它。

更好的解决方案是删除

image3
,如下所示:

from matplotlib import pyplot as plt
import cv2

image1 = cv2.imread('rgb.png')
image2 = cv2.cvtColor(image1, cv2.COLOR_BGR2RGB)
cv2.imwrite('test_img_bgr_cv.png', image2)


plt.figure(figsize=(10, 10))
plt.subplot(1, 3, 1) 
plt.imshow(image1)
plt.title('Image 1')

plt.figure(figsize=(10, 10))
plt.subplot(1, 3, 2)
plt.imshow(image2)
plt.title('Image 1')

plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.