我正在嘗試學習 OpenCV 并且我對這些東西(Python、OpenCV)不熟悉。
這是我正在關注的鏈接 這是我不明白的部分
在第 1 課中,有一個關于為什么要使用 RGB 和 BGR 轉換的主題。我知道 matplotlib 使用的是 RGB,而 OpenCV 使用的是 BGR(如果我錯了,請糾正我)。但是無法使用以下代碼將 BGR 轉換為 RGB:
coke_img_channels_reversed = coke_img[:, :, ::-1]
plt.imshow(coke_img_channels_reversed)
而且我不知道轉換是完全在矩陣還是陣列中完成的。此代碼如何將 BGR 的順序更改為 RGB。誰能從數學上或邏輯上解釋它?
uj5u.com熱心網友回復:
對于最后一個維度的顏色通道,可以這樣想:您有三個矩陣 B (mxn)、G (mxn) 和 R (mxn),它們彼此“堆疊”在一起,B 位于底部,G 在中間,R 在頂部。如果它們真的是單獨的矩陣,你會像這樣將它們堆疊在 numpy 中
bgr_image = np.concatenate((B[:, :, None], G[:, :, None], R[:, :, None]), axis=2)
當你在做手術時
rgb_image = bgr_image[:, :, ::-1]
您正在翻轉 BGR 堆疊,以便現在 R 在底部,G 在中間,B 在頂部。從陣列操作的角度(切片符號): bgr_image[:, :, ::-1] 是 bgr_image 的所有“行”(dim0),bgr_image 的所有“列”(dim1),在“通道”(dim2)首先取最后一個通道,然后一個一個地構建回第一個通道(有效地將通道順序從 BGR 反轉為 RGB)。該操作可以更明確地重寫為
rgb_image = bgr_image[0::1, 0::1, -1::-1]
或者如果你想在明確性上走得太遠,你可以這樣做
m, n, c = bgr_image.shape
rgb_image = bgr_image[0:m:1, 0:n:1, -1::-1]
OpenCV 只是使它成為一個方便的功能,即使操作很簡單。他們還嘗試非常接近地鏡像 C 庫,其中在 C 中矩陣移位不是很簡單,而 BGRtoRGB 函式非常方便。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/377832.html
上一篇:找到最小值的“相反”是什么?CV2中的封閉圓-就像輪廓的“內”圓
下一篇:為什么AVL排序不到位?
