【问题标题】:How cv2.imshow() function works in BGR model?cv2.imshow() 函数在 BGR 模型中如何工作?
【发布时间】:2021-01-13 03:14:53
【问题描述】:

在 RGB 颜色模型中,cv2.imshow() 按 bgr 顺序工作,当使用 cv2.imshow() 加载图像并在 matplotlib.plot.show() 函数中显示时,会出错导致 plot.show () 使用 rgb 顺序,可以通过反转图像中 b、g、r 的通道来解决,但是当我将 RGB 颜色模型转换为其他颜色模型时,如 HSV、YUV、YCbCr,当使用 plot.show()它仍然与 cv2.show() 不同。所以当 RGB->HSV、YUV、YCbCr 颜色模型时,cv2.show() 是否仍然像 v、s、h 映射到 b、g、r 一样工作?和 plt.show () 使用顺序 h,s,v 映射到 r,g,b?无论什么颜色模型使用 cv2.show() 和 plot.show(),它只使用 b,g,r 和 r,g,b订单映射到改变的通道?比如 HSV 中的 v,s,h 和 h,s,v,YUV 中的 v,u,y 和 y,u,v?

img_HSV = cv2.cvtColor(img_BGR, cv2.COLOR_BGR2HSV)
plt.show(img_HSV )
cv2.show(img_HSV )
plt.show(img_HSV [:,:,::-1])

第 1 行代码中的结果与第 2 行不同,但第 3 行与第 2 行相同。 所以 plt.show 由 h,s,v 映射到 r,g,b 而 cv2.show 由 v,s,h 映射到 b,g,r?

【问题讨论】:

    标签: python image opencv


    【解决方案1】:

    plt.show(img_HSV) 假设输入是 RGB cv2.show(img_HSV) 假设输入是 BGR

    因此,如果您以不同的格式提供输入,他们无论如何都会采用他们假设的通道。例如,cv2.imshow(img_HSV) 方法会将 Hue 值作为蓝色,因此会有不同的图像表示。

    因此,在处理完其他颜色空间之后,只需将它们转换回 RGB 或 BGR 以用于 imshow() 函数。

    【讨论】:

      【解决方案2】:

      我假设你的意思是你的标题中的cv2.imshow(和plt.imshow),对吧?大多数时候(以及在所有示例中)您将具有三个通道的图像传递给函数plt.imshow 和cv2.imshow。

      这些是 numpy 数组,数据类型(uint8、float32 等)是您隐式传递的唯一信息。所以这些函数根本不知道您当前使用的是哪种颜色编码。他们简单地将其解释为 RGB (matplotlib) 和 BGR (OpenCV)。因此,第二个通道将始终被解释为绿色,其他通道分别被解释为红色和蓝色。这就是他们所做的一切。

      PS:如果你传递一个单通道数组,你会得到一个灰色的图像。

      PPS:考虑 numpy 数组中值的范围。例如,如果您传递浮点值,则值应该在区间 [0-1] 内,而对于 uint8,它对于 matplotlib 是 [0-255]。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-25
        • 1970-01-01
        • 1970-01-01
        • 2019-10-31
        • 2023-03-21
        • 2012-04-12
        • 1970-01-01
        相关资源
        最近更新 更多