正如我所相信的,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?
6条答案
按热度按时间5jvtdoz21#
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。1bqhqjot2#
这一行代码将RGB改变为BGR,
d5vmydt93#
对于matplotlib,我们需要将BGR更改为RGB:
myss37ts4#
这将通过反转通道将BGR转换为RGB通道图像。
dgjrabp25#
如果不需要使用任何其他图像处理库(例如Matplotlib的imshow),则不需要进行色阶转换。下面的代码是一个示例,其中色阶转换已完成,但加载图像时,图像仍加载在BGR中。由于图像是使用cv2.imshow()显示的,因此不需要进行此转换。
62lalag46#
或者,您可以使用imutils.opencv2matplotlib()函数,它不需要BGR到RGB的转换。