opencv imshow不需要从BGR转换为RGB

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

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

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

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

  1. img_bgr = cv2.imread(image_path)
  2. cv2.imshow('BGR Image',img_bgr)
  3. img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
  4. cv2.imshow('RGB Image',img_rgb )
  5. 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#

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

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

d5vmydt9

d5vmydt93#

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

  1. img = cv2.imread("image_name")
  2. img = img[...,::-1]
  3. plt.imshow(img)
myss37ts

myss37ts4#

  1. opencv_image_with_bgr_channels = cv2.imread('path/to/color_image.jpg')
  2. matplotlib_compatible_image_with_rgb_channels = opencv_image_with_bgr_channels[:,:, ::-1]

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

dgjrabp2

dgjrabp25#

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

  1. import cv2
  2. # read the image #
  3. image = cv2.imread('<<Image Path>>')
  4. image_rgb = cv2.cvtColor(image,cv2.COLOR_BGR2RGB)
  5. # write a function to draw circles on the image #
  6. def draw_circle(event,x,y,flags,params):
  7. if event == cv2.EVENT_RBUTTONDOWN:
  8. cv2.circle(img=image_rgb,center=(x,y),radius=100,color=(0,0,255),thickness=10)
  9. # Open CV callbacks #
  10. cv2.namedWindow(winname='ImageWindow')
  11. cv2.setMouseCallback('ImageWindow',draw_circle)
  12. # display the image till the user hits the ESC key #
  13. while True:
  14. cv2.imshow('ImageWindow',image_rgb)
  15. if cv2.waitKey(20) & 0xFF == 27:
  16. break
  17. cv2.destroyAllWindows()
展开查看全部
62lalag4

62lalag46#

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

相关问题