目錄
一、邊緣填充
1、邊界復制
2、邊界反射
3、邊界反射101
4、邊界常數
5、邊界包裹
二、透視變換
三、圖像掩膜
1、制作掩膜
2、與運算
3、顏色替換
?四、ROI切割
?五、圖像添加水印
一、邊緣填充
? ? ? ? 我們對圖像進行處理后,需要對空出來的區域進行一個填充,此外、后續的一些圖像處理方式也會用到邊緣填充
(下面例子會在插值方法后繼續操作)
? ? ? ? 1、邊界復制
cv2.BORDER_REPLICATE
?邊界復制會將邊界處的像素值進行復制,然后作為邊界填充的像素? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?值,如左圖所示,可以看到四周的像素值都一樣
? ? ? ? ?2、邊界反射
cv2.BORDER_REFLECT
如左圖所示,會根據原圖的邊緣進行反射
? ? ? ? ?3、邊界反射101
cv2.BORDER_REFLECT_101
與邊界反射不同的是,不再反射邊緣的像素點,如左圖所示
? ? ? ? ?4、邊界常數
cv2.BORDER_CONSTANT
當選擇邊界常數時,還要指定常數值是多少,默認的填充常數值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 為0,如左圖所示
? ? ? ? 5、邊界包裹
cv2.BORDER_WRAP
如左圖所示
二、透視變換
? ? ? ? 透視變換就是圖像矯正,是把一個圖像投影到一個新的視平面的過程, 通俗的講,透視變換的作用其實就是改變一下圖像里的目標物體的被觀察的視角
M=getPerspectiveTransform(src,dst)
src:原圖像上需要進行透視變化的四個點的坐標,這四個點用于定義一個原圖中的四邊形區域
dst:透視變換后,src的四個點在新目標圖像的四個新坐標
該函數會返回一個透視變換矩陣,得到透視變化矩陣之后,使用warpPerspective()函數即可進行透視變化計算,并得到新的圖像
cv2.warpPerspective(img, M, dsize, flags, borderMode)
img:輸入圖像。
M:透視變換矩陣。這個矩陣可以通過getPerspectiveTransform函數計算得到。
dsize:輸出圖像的大小。它可以是一個Size對象,也可以是一個二元組。
flags:插值方法的標記。
borderMode:邊界填充的模式
三、圖像掩膜
掩膜(Mask)是一種在圖像處理中常見的操作,它用于選擇性地遮擋圖像的某些部分,以實現特定任務的目標。掩膜通常是一個二值化圖像,并且與原圖像的大小相同,其中目標區域被設置為1(或白色),而其他區域被設置為0(或黑色),并且目標區域可以根據HSV的顏色范圍進行修改
? ? ? ? 1、制作掩膜
mask=cv.inRange(img,color_low,color_high)
左圖是HSV每個顏色的最大最小值
? ? ? ? 2、與運算
當兩個命題都是真時,其結果才為真。而在圖像處理中,“與”運算被用來對圖像的像素值進行操作,掩膜中有很多地方是黑色的,其像素值為0,那么在與原圖像進行“與”運算的時候,得到的新圖像的對應位置也是黑色的
(任何值與上0(黑) 都等于0,任何值與上1(白) 都等于這個值本身)
cv2.bitwise_and(src1,src2[,mask])
src2:
第一個輸入數組。通常是輸入的原始圖像
src2
:第二個輸入數組。它可以是另一個圖像、一個常數值或者與 src1
相同的圖像
? ? ? ? a. 當應用掩膜時,這個參數經常就是src1
本身;即對同一個圖像進行操作
? ? ? ? b. 如果對兩個不同的圖像執行按位與操作(例如,將兩張圖片的某些部分組合在一起),可? ? ? ? ? ? ?以分別將它們作為 src1
和 src2
輸入到 cv2.bitwise_and()
函數中,創建復雜的圖像效果? ? ? ? ? ? ? ?或進行圖像合成
mask
:掩膜(可選)。輸入數組元素只有在該掩膜非零時才被處理。是一個8位單通道的數組,尺寸必須與src1
和src2
相同
返回值:輸出數組,應用掩膜后的圖像,與輸入數組大小和類型相同
? ? ? ? 3、顏色替換
由于掩膜與原圖的大小相同,并且像素位置一一對應,那么我們就可以得到掩膜中白色(也就是像素值為255)區域的坐標,并將其帶入到原圖像中,然后就可以修改像素值了,這樣就完成了顏色的替換
?四、ROI切割
????????ROI:Region of Interest,翻譯過來就是感興趣的區域,就是通過切片實現,對圖像局部操作
?五、圖像添加水印
????????添加水印的概念其實可以理解為將一張圖片中的某個物體或者圖案提取出來,然后疊加到另一張圖片上。具體的操作思想是通過將原始圖片轉換成灰度圖,并進行二值化處理,去除背景部分,得到一個類似掩膜的圖像。然后將這個二值化圖像與另一張圖片中要添加水印的區域進行“與”運算,使得目標物體的形狀出現在要添加水印的區域。最后,將得到的目標物體圖像與要添加水印的區域進行相加,就完成了添加水印的操作。這樣可以實現將一個圖像中的某個物體或圖案疊加到另一個圖像上,從而實現添加水印的效果
(在roi切片區域的修改是直接在原圖上修改的,指向的是同一內存地址)