正如我所相信的那样,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 许可协议
BGR 和 RGB 不是颜色空间,它们只是不同颜色通道顺序的约定。
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
不做任何计算(就像转换成 HSV 那样),它只是改变顺序。任何顺序都是有效的——实际上,三个值(红色、绿色和蓝色)堆叠在一起形成一个像素。你可以按照你喜欢的方式排列它们,只要你告诉显示器你给它的顺序。OpenCV
imread
,imwrite
和imshow
确实都适用于 BGR 顺序,因此当您读取图像时无需更改顺序cv2.imread
然后想用cv2.imshow
显示它。虽然 BGR 在整个 OpenCV 中一致使用,但大多数其他图像处理库使用 RGB 排序。如果您想使用
matplotlib
的imshow
但使用 OpenCV 读取图像,则需要将 BGR 转换为 RGB。