在 OpenCV 的圖像處理世界中,除了圖像邊框處理,還有一些基礎且重要的函數和運算,它們在圖像編輯、融合等場景中發揮著關鍵作用。下面我們就來詳細介紹cv2.copyMakeBorder()函數的具體參數與作用,以及圖像加法運算和加權運算的相關內容。
一、圖像邊界擴充:
copyMaKeBorder()函數:
函數原型:
dst = cv2.threshold(src,top,bottom,left,right,borderType,value=None)
src:這是要擴充邊界的原始圖像,是函數處理的基礎對象。
top、bottom、left、right:分別表示在圖像上、下、左、右四個方向上添加的邊界寬度
borderType:定義要添加邊框的類型,不同的類型會產生截然不同的邊界效果,具體如下:
1.CV2.BORDER_CONSTANT:
添加的邊界框像素值為常數(需要額外再給定一個參數)。
示例代碼:
value=額外給定參數(rgb參數)
import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
constant = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_CONSTANT,value=(100,73,210))
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
運行結果:
可以看出邊框被玫紅色填補
2.CV2.BORDER_REFLECT:
添加的邊框像素將是邊界元素的鏡面反射,類似于gfedchalabcdefghlhgfedcba。(交界處也復制了)
import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
reflet = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.CV2.BORDER_REFLECT_101 或
?CV2.BORDER_DEFAULT:
和上面類似,但是有一些細微的不同,類似于gfedcblabcdefghgfedcba (交接處刪除了)
示例代碼:
這個圖不明顯。。
import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
reflet101 = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REFLECT101)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
4.?CV2.BORDER_REPLICATE:
使用最邊界的像素值代替,類似于aaaaaalabcdefghIhhhhhhh
示例代碼:
import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
replicate = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_REPLICATE)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖像相當于被拉伸了,從圖中可以明顯看出
5.#CV2.BOR激DER_WRAP:
上下左右邊依次換,cdefghlabcdefghlabcdefg
示例代碼:
import cv2
ys = cv2.imread('img.png')
top,bottom,left,right=50,50,50,50
wrap = cv2.copyMakeBorder(ys,top,bottom,left,right,borderType=cv2.BORDER_WRAP)
cv2.imshow('yuan',ys)
cv2.waitKey(0)
cv2.imshow('CONSTANT',constant)
cv2.waitKey(0)
cv2.destroyAllWindows()
相同數字為互換位置,不必在意,知道就行了
二、圖像中的算數
1. 減法:制造「暗角」特效
c = a - 100
對整張圖逐像素減去固定值 100。
結果所有像素變暗,呈現低曝光的膠片感。
注意:NumPy 減法會出現負值回繞(<0 時從 255 繼續倒數),如果想把負值截斷到 0,應使用 cv2.subtract(a, 100)
。
2. 加法:兩張圖「硬疊加」
c = a[50:450, 50:400] + b[50:450, 50:400]
這里是逐像素相加。
溢出截斷:OpenCV 的
cv2.add()
會把 >255 的像素強制設為 255,而 NumPy 默認會取模(回繞),造成色彩失真。適合制作重影、鬼影效果。
示例代碼:
import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c=a-100
d = a+100
cv2.imshow('yuan',a)
cv2.imshow('a-10',c)
cv2.imshow('a+10',d)
cv2.waitKey(0)
cv2.destroyAllWindows()
3.兩圖像相加減:
對于cv2.add()運算,當對圖像a,圖像b進行加法求和時,遵循以下規則:
當某位置像素相加得到的數值小于255時,該位置數值為倆圖像該位置像素相加之和
當某位置像素相加得到的數值大于255時,該位置數值為255
import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c = a[50:450,50:400]+b[50:450,50:400]
cv2.imshow('a+b',c)
cv2.waitKey(0)
運行結果:
4.圖像加權
計算兩幅圖像的像素值之和時,將每幅圖像的權重考慮進來
同樣的相加數據,加入權重會得出不一樣的圖片:
權重大的更為清晰
權重小的較為透明
實例代碼:
import cv2
a = cv2.imread('img.png')
b=cv2.imread('longnv.webp')
c = a[50:450,50:400]+b[50:450,50:400]
cv2.imshow('a+b',c)
cv2.waitKey(0)
a = cv2.imread('img.png')
b = cv2.imread('longnv.webp')
b = cv2.resize(b,(400,400))
a = cv2.resize(a,(400,400))
c=cv2.addWeighted(a,0.2,b,0.8,10)
cv2.imshow('addwd',c)
cv2.waitKey(0)
cv2.destroyAllWindows()
#