opencv imshow不需要从BGR转换为RGB

dzhpxtsq  于 2022-11-15  发布在  其他
关注(0)|答案(6)|浏览(229)

正如我所相信的,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?

5jvtdoz2

5jvtdoz21#

BGR和RGB不是颜色空间,它们只是不同颜色通道顺序的约定。cv2.cvtColor(img, cv2.COLOR_BGR2RGB)不进行任何计算(就像HSV的转换一样),它只是改变了顺序。任何顺序都是有效的--实际上,三个值(红、绿色、蓝)堆叠在一起形成一个像素。您可以按自己喜欢的方式排列它们,只要您告诉显示器您给它的顺序。
OpenCV imreadimwriteimshow实际上都使用BGR顺序,因此当您使用cv2.imread读取图像,然后想要使用cv2.imshow显示图像时,无需更改顺序。
虽然BGR在整个OpenCV中被一致使用,但大多数其他图像处理库使用RGB排序。如果你想使用matplotlibimshow,但用OpenCV读取图像,你需要从BGR转换到RGB。

1bqhqjot

1bqhqjot2#

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

这一行代码将RGB改变为BGR,

d5vmydt9

d5vmydt93#

对于matplotlib,我们需要将BGR更改为RGB:

img = cv2.imread("image_name")
img = img[...,::-1]

plt.imshow(img)
myss37ts

myss37ts4#

opencv_image_with_bgr_channels = cv2.imread('path/to/color_image.jpg')

matplotlib_compatible_image_with_rgb_channels = opencv_image_with_bgr_channels[:,:, ::-1]

这将通过反转通道将BGR转换为RGB通道图像。

dgjrabp2

dgjrabp25#

如果不需要使用任何其他图像处理库(例如Matplotlib的imshow),则不需要进行色阶转换。下面的代码是一个示例,其中色阶转换已完成,但加载图像时,图像仍加载在BGR中。由于图像是使用cv2.imshow()显示的,因此不需要进行此转换。

import cv2

# read the image #
image = cv2.imread('<<Image Path>>')
                
image_rgb = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)

# write a function to draw circles on the image #
def draw_circle(event,x,y,flags,params):
    if event == cv2.EVENT_RBUTTONDOWN:
        cv2.circle(img=image_rgb,center=(x,y),radius=100,color=(0,0,255),thickness=10)

# Open CV callbacks #
cv2.namedWindow(winname='ImageWindow')
cv2.setMouseCallback('ImageWindow',draw_circle)

# display the image till the user hits the ESC key #
while True:
    cv2.imshow('ImageWindow',image_rgb)
    if cv2.waitKey(20) & 0xFF == 27:
        break
        
cv2.destroyAllWindows()
62lalag4

62lalag46#

或者,您可以使用imutils.opencv2matplotlib()函数,它不需要BGR到RGB的转换。

相关问题