簡體   English   中英

Python OpenCV - imshow 不需要從 BGR 轉換為 RGB

[英]Python OpenCV - imshow doesn't need convert from BGR to 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?

BGR 和 RGB 不是顏色空間,它們只是不同顏色通道順序的約定。 cv2.cvtColor(img, cv2.COLOR_BGR2RGB)不做任何計算(就像轉換成 HSV 那樣),它只是切換順序。 任何排序都是有效的——實際上,三個值(紅色、綠色和藍色)堆疊在一起形成一個像素。 您可以按您喜歡的任何方式排列它們,只要您告訴顯示屏您給它的順序即可。

OpenCV imreadimwriteimshow確實都適用於 BGR 順序,因此當您使用cv2.imread讀取圖像然后想使用cv2.imshow顯示時,無需更改順序。

雖然 BGR 在整個 OpenCV 中一致使用,但大多數其他圖像處理庫使用 RGB 排序。 如果您想使用matplotlibimshow但使用 OpenCV 讀取圖像,則需要從 BGR 轉換為 RGB。

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

這一行代碼將 rgb 更改為 bgr

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 通道圖像。

對於 matplotlib,我們需要將 BGR 更改為 RGB:

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

plt.imshow(img)

如果不需要使用任何其他圖像處理庫(例如 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()

或者,您可以使用 imutils.opencv2matplotlib() 函數,該函數不需要 BGR 到 RGB 的轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM