imshow 不需要从 BGR 转换为 RGB

新手上路,请多包涵

正如我所相信的那样,OpenCV 以 BGR色彩空间顺序读取图像,我们通常必须像这样将其转换回 RGB:

 img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

但是当我尝试简单地读取图像并显示它时,着色看起来很好(不需要将 BGR 转换为 RGB):

 img_bgr = cv2.imread(image_path)
cv2.imshow('BGR Image',img_bgr)
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
cv2.imshow('RGB Image',img_rgb )
cv2.waitkey(0)

那么 imshow() 自动更改函数内的排序(从 BGR 到 RGB)还是排序一直是 BGR?

原文由 Cypher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

BGR 和 RGB 不是颜色空间,它们只是不同颜色通道顺序的约定。 cv2.cvtColor(img, cv2.COLOR_BGR2RGB) 不做任何计算(就像转换成 HSV 那样),它只是改变顺序。任何顺序都是有效的——实际上,三个值(红色、绿色和蓝色)堆叠在一起形成一个像素。你可以按照你喜欢的方式排列它们,只要你告诉显示器你给它的顺序。

OpenCV imread , imwriteimshow 确实都适用于 BGR 顺序,因此当您读取图像时无需更改顺序 cv2.imread 然后想用 cv2.imshow 显示它。

虽然 BGR 在整个 OpenCV 中一致使用,但大多数其他图像处理库使用 RGB 排序。如果您想使用 matplotlibimshow 但使用 OpenCV 读取图像,则需要将 BGR 转换为 RGB。

原文由 w-m 发布,翻译遵循 CC BY-SA 4.0 许可协议

screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)

这一行代码将 rgb 更改为 bgr

原文由 Satyam Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题