【问题标题】:RGB2BGR in opencv does not convert colors correctlyopencv 中的 RGB2BGR 不能正确转换颜色
【发布时间】:2020-06-07 07:58:38
【问题描述】:
pil_image = Image.open('1.png')
opencvImage = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)

plt.imshow(pil_image)

COLOR_RGB2BGR 没有正确转换颜色的任何原因?

我试图保持红色,但它变成了紫色。

【问题讨论】:

  • 请问紫色在哪里?
  • 哦,我明白了,你把输入和输出图像连接在一起了。请单独提供。
  • 你在改变像素顺序不正常吗?
  • 为什么要用 PIL 打开图像,用 OpenCV 处理,用 matplotlib 显示?你肯定会混淆自己并添加不必要的依赖项。
  • 您的帖子中只有一张图片包含两个图表。

标签: image opencv


【解决方案1】:

当你用 PIL 打开图片时,像这样:

im = Image.open('1.png')

你得到一个 RGB 图像。

然后(不必要地)将其转换为 OpenCV 使用的 BGR:

opencvimage = cvtColor()

但是你用 matplotlib 显示它,它使用 RGB !!!

我告诉过你你会迷惑自己?


如果你想用 PIL 显示一个 RGB PIL 图像:

pRGB = Image.open('1.png')  # PIL RGB
pRGB.show()

如果你想用 matplotlib 显示一个 RGB PIL 图像:

pRGB = Image.open('1.png')  # PIL RGB
nRGB = np.array(pRGB)       # Numpy RGB
plt.imshow(nRGB)

如果你想用 matplotlib 显示 OpenCV 图像:

nBGR = cv2.imread('1.png')
plt.imshow(nBGR[:,:,::-1])

【讨论】:

    【解决方案2】:

    这是正常情况。因为如果你的源图像在转换为 BGR 时是 RGB 格式,那么它的通道顺序当然会改变。所以很正常。

    例如:

    if pixel of source = (12,102,53) = (R,G,B)  then this will become
                         (53,102,12) = (B,G,R)
    

    注意:您可以使用此site 检查您的像素值。换个频道的顺序你就明白了。

    这里也是之前讨论过的post

    【讨论】:

    • PIL使用RGB排序,OpenCV使用BGR,所以需要重新排序。
    • 那么它也很简单,只需要再转换一次为CV_RGB2BGR
    • 没有。如果你运行 RGB2BGR 两次,你将在你开始的地方结束,所以没有意义。
    • 但是如果你应用那个opencvImage,你会得到想要的opencv格式的彩色图像吗?
    • 如果你交换第一和第三通道,然后再交换第一和第三通道,你会得到你的原始图像,所以你最好不要交换任何东西......不管无论您是使用 OpenCV 图像、PIL 图像、CMY 图像还是任何其他图像开始。
    猜你喜欢
    • 2014-03-06
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2018-11-07
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多