可以通過行和列的座標值獲取該畫素點的畫素值。對於BGR影象,它返回一個藍色,綠色,紅色值的陣列。對於灰度影象,僅返回相應的強度值。
可以用同樣的方法修改畫素點的畫素值:
更好的畫素獲取和編輯方法:
影象屬性包括行數,列數和通道數,影象資料型別,畫素數等。
使用img.shape可以獲取影象的形狀。它返回一組行,列和通道的元組(如果影象是彩色的):
注意:如果影象是灰度影象,則返回的元組僅包含行數和列數,因此這是檢查載入的影象是灰度還是彩色的一種很好的方法。
使用img.size獲取的畫素總數, img.dtype獲取影象資料型別:
有時你需要對一幅影象的特定區域進行操作。例如我們要檢測一副影象中眼睛的位置,我們首先應該在影象中找到臉,再在臉的區域中找眼睛,而不是直接在一整幅影象中搜尋。這樣會提高程式的準確性(因為眼睛總在臉上)和效能(因為我們在很小的區域內搜尋)。 ROI 也是使用 Numpy 索引來獲得的。
1.我們先在影象上建立一個目標區域
2.移動目標區域
有時您需要分別處理影象的B、G、R通道。在這種情況下,需要將BGR影象分割為單個通道。或者在其他情況下,可能需要將這些單獨的通道合併到BGR影象。
拆分有兩種方式,cv.split()是一項代價高昂的操作(就消耗時間而言)。所以只有在你需要時才這樣做。否則使用Numpy索引
合併用cv.merge()
假設你要將所有紅色畫素設定為零,則無需先拆分通道。使用Numpy索引更快:
如果要在影象周圍建立邊框,比如相框,可以使用cv.copyMakeBorder()。它在折積運算,零填充等方面有更多的應用。該函數需要以下引數:
其他邊框demo
replicate = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REPLICATE)
reflect = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT)
reflect101 = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_REFLECT_101)
wrap = cv.copyMakeBorder(img1,10,10,10,10,cv.BORDER_WRAP)