函數內容接上文:OpenCV day4-CSDN博客? ,?OpenCV day5-CSDN博客
目錄
平滑(模糊)
25.cv2.blur():
26.cv2.boxFilter():
27.cv2.GaussianBlur():
28.cv2.medianBlur():
29.cv2.bilateralFilter():
銳化與邊緣檢測
30.cv2.filter2D():
31.cv2.Sobel():
32.cv2.Scharr():
33.cv2.Laplacian():
34.cv2.Canny():
繪圖與標注
35.cv2.line():
36.cv2.rectangle():
37.cv2.polylines():
38.cv2.ellipse():
39.cv2.circle():
40.cv2.putText():
輪廓分析
41.cv2.findContours():
42.cv2.drawContours():
43.cv2.approxPolyDP():
平滑(模糊)
25.cv2.blur():
功能 | 對圖像進行均值模糊(平滑處理),通過鄰域像素的平均值減少噪聲或細節。 |
參數 | 1.?src :輸入圖像(單通道或多通道)。2.? ksize :模糊核大小(如?(5,5) )。3.? anchor (可選):錨點位置(默認?(-1,-1) ?表示核中心)。4.? borderType (可選):邊界填充方式(如?cv2.BORDER_DEFAULT )。 |
返回值 | 模糊后的圖像(numpy.ndarray )。 |
關鍵點:
-
均值濾波:核內所有像素取平均,適用于簡單去噪(但可能邊緣模糊)。
-
核大小:
ksize
?必須是正奇數(如?(3,3)
、(5,5)
)。
26.cv2.boxFilter():
功能 | 對圖像進行方框濾波(均值濾波的通用版本,可控制歸一化)。 |
參數 | 1.?src :輸入圖像。2.? ddepth :輸出圖像深度(如?-1 ?表示與輸入相同)。3.? ksize :濾波核大小(如?(3,3) )。4.? normalize (可選):是否歸一化(默認?True ,效果同?cv2.blur() )。5.? anchor (可選):錨點位置(默認核中心)。6.? borderType (可選):邊界填充方式(如?cv2.BORDER_REFLECT )。 |
返回值 | 濾波后的圖像(numpy.ndarray )。 |
關鍵特性:
-
歸一化:
normalize=True
?時等同于?cv2.blur()
(求均值),False
?時直接求和(可能導致值溢出)。 -
靈活性:可自定義輸出圖像深度(如?
cv2.CV_32F
?保留浮點結果)。
27.cv2.GaussianBlur():
功能 | 對圖像進行高斯模糊(基于高斯分布的加權平均濾波,有效減少噪聲并保留邊緣)。 |
參數 | 1.?src :輸入圖像(支持多通道)。2.? ksize :高斯核大小(寬高為正奇數,如(5,5) )。3.? sigmaX :X方向標準差(控制模糊強度,0表示自動計算)。4.? sigmaY (可選):Y方向標準差(默認同sigmaX )。5.? borderType (可選):邊界填充方式(如cv2.BORDER_DEFAULT )。 |
返回值 | 高斯模糊后的圖像(numpy.ndarray )。 |
關鍵特性:
-
高斯權重:中心像素權重高,邊緣權重低,比均值模糊更保邊緣。
-
標準差:
sigma
越大,模糊效果越強(若為0,則根據ksize
自動計算)。 -
核大小:必須是正奇數(如
(3,3)
、(5,5)
)。
28.cv2.medianBlur():
功能 | 對圖像進行中值模糊(用鄰域像素的中值替代中心像素,有效去除椒鹽噪聲)。 |
參數 | 1.?src :輸入圖像(支持單通道或多通道,但深度需為CV_8U 或CV_32F )。2.? ksize :濾波核大小(必須為大于1的奇數,如3、5等)。 |
返回值 | 中值濾波后的圖像(numpy.ndarray )。 |
關鍵特性:
-
非線性濾波:取鄰域中位數,非均值/加權平均,適合去除椒鹽噪聲(突發的黑白噪點)。
-
保護邊緣:相比均值模糊,能更好保留銳利邊緣。
-
核限制:核大小必須是奇數(如3、5、7),且不能為1。
29.cv2.bilateralFilter():
功能 | 對圖像進行雙邊濾波,在平滑噪聲的同時保留邊緣(非線性能量保持濾波)。 |
參數 | 1.?src :輸入圖像(8位或浮點型,單通道或多通道)。2.? d :鄰域直徑(若≤0則根據sigmaSpace 計算)。3.? sigmaColor :顏色空間標準差(控制顏色相似性權重)。4.? sigmaSpace :坐標空間標準差(控制距離權重)。5.? borderType (可選):邊界填充方式(默認cv2.BORDER_DEFAULT )。 |
返回值 | 濾波后的圖像(numpy.ndarray )。 |
關鍵特性:
-
邊緣保留:結合顏色相似性和空間距離雙重權重,避免邊緣模糊。
-
參數敏感:
sigmaColor
越大,顏色容忍度越高;sigmaSpace
越大,遠處像素影響越大。 -
計算較慢:比高斯濾波耗時,適合小區域或實時性要求不高的場景。
銳化與邊緣檢測
30.cv2.filter2D():
功能 | 對圖像進行自定義卷積操作,通過用戶定義的核(Kernel)實現濾波效果。 |
參數 | 1.?src :輸入圖像(單通道或多通道)。2.? ddepth :輸出圖像深度(如?-1 ?表示與輸入相同)。3.? kernel :卷積核(numpy.ndarray ,需為單通道浮點矩陣)。4.? anchor (可選):核的錨點位置(默認中心)。5.? delta (可選):卷積后疊加的常數(默認0)。6.? borderType (可選):邊界填充方式(如?cv2.BORDER_CONSTANT )。 |
返回值 | 卷積后的圖像(numpy.ndarray )。 |
關鍵特性:
-
靈活性強:可自定義核實現銳化、邊緣檢測、模糊等效果。
-
數學本質:核與圖像局部區域做點乘后求和(離散卷積運算)。
-
邊界處理:默認填充黑色,可通過?
borderType
?調整。
31.cv2.Sobel():
功能 | 使用Sobel算子計算圖像的一階梯度(用于邊緣檢測)。 |
參數 | 1.?src :輸入圖像(單通道)。2.? ddepth :輸出圖像深度(如cv2.CV_64F 保留負梯度)。3.? dx :x方向導數階數(如1表示檢測垂直邊緣)。4.? dy :y方向導數階數(如1表示檢測水平邊緣)。5.? ksize (可選):Sobel核大小(默認3,僅支持1/3/5/7)。6.? scale (可選):縮放因子(默認1)。7.? delta (可選):結果疊加的常數(默認0)。8.? borderType (可選):邊界填充方式(默認cv2.BORDER_DEFAULT )。 |
返回值 | 梯度圖像(numpy.ndarray )。 |
關鍵特性
-
梯度方向
-
dx=1, dy=0
:檢測垂直邊緣(對x方向求導)。 -
dx=0, dy=1
:檢測水平邊緣(對y方向求導)。 -
dx=1, dy=1
:同時檢測兩個方向的邊緣(不常用,推薦分開計算后合并)。
-
-
核大小
-
ksize=1
:使用1×3或3×1核(無高斯平滑)。 -
ksize=3
(默認):3×3核,含高斯權重,抗噪性更好。
-
-
輸出深度
-
使用
cv2.CV_64F
保留負梯度值,最后取絕對值:
-
grad_x = cv2.Sobel(img, cv2.CV_64F, 1, 0)
abs_grad = cv2.convertScaleAbs(grad_x) # 轉為8位無符號
32.cv2.Scharr():
項目 | 說明 |
---|---|
功能 | 使用Scharr算子計算圖像的一階梯度(比Sobel更精確的邊緣檢測)。 |
參數 | 1.?src :輸入圖像(單通道)。2.? ddepth :輸出圖像深度(如cv2.CV_64F )。3.? dx :x方向導數階數(1或0)。4.? dy :y方向導數階數(1或0)。5.? scale (可選):縮放因子(默認1)。6.? delta (可選):結果疊加的常數(默認0)。7.? borderType (可選):邊界填充方式(默認cv2.BORDER_DEFAULT )。 |
返回值 | 梯度圖像(numpy.ndarray )。 |
核心特性
-
與Sobel的對比
-
更高精度:Scharr算子使用3×3核時,對梯度的近似計算比Sobel更精確(尤其對對角邊緣)。
-
固定核大小:僅支持
ksize=3
(不可像Sobel那樣選擇1/5/7)。
-
-
梯度方向
-
dx=1, dy=0
:檢測垂直邊緣。 -
dx=0, dy=1
:檢測水平邊緣。 -
不支持
dx=dy=1
(需分開計算后合并)。
-
33.cv2.Laplacian():
項目 | 說明 |
---|---|
功能 | 使用拉普拉斯算子計算圖像的二階導數,用于邊緣檢測(對噪聲敏感,但能檢測全方向邊緣)。 |
參數 | 1.?src :輸入圖像(單通道)。2.? ddepth :輸出圖像深度(如?cv2.CV_64F ?保留負值)。3.? ksize (可選):核大小(默認1,僅支持1/3/5/7)。4.? scale (可選):縮放因子(默認1)。5.? delta (可選):結果疊加的常數(默認0)。6.? borderType (可選):邊界填充方式(默認?cv2.BORDER_DEFAULT )。 |
返回值 | 二階梯度圖像(numpy.ndarray )。 |
34.cv2.Canny():
功能 | 使用Canny算法進行多階段邊緣檢測(低錯誤率+邊緣細化)。 |
參數 | 1.?image :輸入圖像(必須為單通道灰度圖)。2.? threshold1 :低閾值(弱邊緣篩選)。3.? threshold2 :高閾值(強邊緣確認)。4.? apertureSize (可選):Sobel算子核大小(默認3)。5.? L2gradient (可選):梯度計算方式(True 用L2范數更精確,默認False 用L1范數)。 |
返回值 | 二值邊緣圖像(numpy.ndarray ,邊緣=255,背景=0)。 |
關鍵特性
-
雙閾值機制
-
強邊緣:梯度值 >?
threshold2
?→ 保留。 -
弱邊緣:
threshold1
?< 梯度值 ≤?threshold2
?→ 僅當與強邊緣連接時保留。 -
建議比例:
threshold2 ≈ 2×threshold1
(如?50, 150
)。
-
-
處理流程
-
輸出效果
-
邊緣為細線(1像素寬),背景純黑。
-
對噪聲魯棒,但依賴閾值參數調優。
-
繪圖與標注
35.cv2.line():
功能 | 在圖像上繪制一條線段。 |
參數 | 1.?img :輸入圖像(直接修改該圖像)。2.? pt1 :線段起點坐標?(x1, y1) 。3.? pt2 :線段終點坐標?(x2, y2) 。4.? color :線條顏色(BGR三元組,如?(255,0,0) ?表示紅色)。5.? thickness (可選):線條粗細(默認1)。6.? lineType (可選):線條類型(如?cv2.LINE_AA ?抗鋸齒)。7.? shift (可選):坐標小數位數(默認0)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
坐標系統
-
原點?
(0,0)
?在圖像左上角,x向右增長,y向下增長。
-
-
線條樣式
-
lineType=cv2.LINE_AA
:抗鋸齒線條(更平滑,但速度稍慢)。 -
lineType=cv2.LINE_8
:8連通快速繪制(默認)。
-
-
顏色模式
-
BGR順序:OpenCV默認格式(與RGB相反),例如紅色為?
(0,0,255)
。
-
36.cv2.rectangle():
功能 | 在圖像上繪制矩形(空心或實心)。 |
參數 | 1.?img :輸入圖像(直接修改該圖像)。2.? pt1 :矩形左上角坐標?(x1, y1) 。3.? pt2 :矩形右下角坐標?(x2, y2) 。4.? color :矩形顏色(BGR三元組,如?(0,255,0) ?表示綠色)。5.? thickness (可選):線條粗細(默認1,負數表示填充矩形)。6.? lineType (可選):線條類型(如?cv2.LINE_AA ?抗鋸齒)。7.? shift (可選):坐標小數位數(默認0)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
坐標定義
-
pt1
?和?pt2
?分別對應矩形的左上角和右下角(無需保證?x2>x1
?或?y2>y1
,函數會自動處理)。
-
-
填充模式
-
thickness=-1
:用指定顏色填充整個矩形。 -
thickness≥1
:繪制空心矩形邊框。
-
-
顏色與樣式
-
BGR順序:例如藍色為?
(255,0,0)
。 -
lineType=cv2.LINE_AA
:抗鋸齒邊框(適合傾斜矩形)。
-
37.cv2.polylines():
功能 | 在圖像上繪制一個或多個多邊形(空心或實心)。 |
參數 | 1.?img :輸入圖像(直接修改該圖像)。2.? pts :多邊形頂點數組(格式見示例)。3.? isClosed :是否閉合多邊形(True=首尾相連)。4.? color :線條顏色(BGR三元組)。5.? thickness (可選):線條粗細(默認1)。6.? lineType (可選):線條類型(如?cv2.LINE_AA )。7.? shift (可選):坐標小數位數(默認0)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
頂點格式
-
單個多邊形:
np.array([[x1,y1], [x2,y2], ...], dtype=np.int32)
-
多個多邊形:
[poly1_pts, poly2_pts, ...]
(列表包裹多個數組)
-
-
閉合控制
-
isClosed=True
:自動連接首尾點(如繪制五角星)。 -
isClosed=False
:開放路徑(如繪制折線)。
-
-
批量繪制
-
可一次性繪制多個多邊形,比循環調用?
cv2.line()
?更高效。
-
38.cv2.ellipse():
項目 | 說明 |
---|---|
功能 | 在圖像上繪制橢圓(空心或實心)、圓弧或扇形。 |
參數 | 1.?img :輸入圖像(直接修改)。2.? center :橢圓中心?(x,y) 。3.? axes :主軸長度?(長軸,短軸) 。4.? angle :旋轉角度(順時針,度)。5.? startAngle :起始角度(0°為3點鐘方向)。6.? endAngle :結束角度(如360°完整橢圓)。7.? color :顏色(BGR)。8.? thickness (可選):線寬(默認1,-1填充)。9.? lineType (可選):線型(如cv2.LINE_AA )。10.? shift (可選):坐標小數位數(默認0)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
角度定義
-
angle
:橢圓整體旋轉角度(如0°時長軸水平)。 -
startAngle/endAngle
:局部弧線范圍(0°→360°繪制完整橢圓)。
-
-
填充模式
-
thickness=-1
:填充圖形(如繪制實心圓)。 -
thickness≥1
:繪制邊框。
-
-
特殊圖形
-
圓:設?
axes=(r,r)
?且?angle=0
。 -
扇形:設?
startAngle=30, endAngle=270
。
-
39.cv2.circle():
功能 | 在圖像上繪制圓形(空心或實心)。 |
參數 | 1.?img :輸入圖像(直接修改)。2.? center :圓心坐標?(x,y) 。3.? radius :圓半徑(像素)。4.? color :顏色(BGR三元組)。5.? thickness (可選):線寬(默認1,-1表示填充)。6.? lineType (可選):線型(如?cv2.LINE_AA ?抗鋸齒)。7.? shift (可選):坐標小數位數(默認0)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
坐標系統
-
圓心?
(x,y)
?的坐標系原點在圖像左上角,x向右增長,y向下增長。
-
-
填充模式
-
thickness=-1
:繪制實心圓(如標記目標中心點)。 -
thickness≥1
:繪制空心圓(如標記檢測框)。
-
-
抗鋸齒
-
lineType=cv2.LINE_AA
:邊緣平滑(適合高分辨率圖像)。 -
lineType=cv2.LINE_8
:快速繪制(默認)
-
40.cv2.putText():
項目 | 說明 |
---|---|
功能 | 在圖像上繪制文字(支持多種字體、大小和樣式)。 |
參數 | 1.?img :輸入圖像(直接修改)。2.? text :要繪制的字符串。3.? org :文字左下角起點?(x,y) 。4.? fontFace :字體類型(如?cv2.FONT_HERSHEY_SIMPLEX )。5.? fontScale :字體縮放因子(大小)。6.? color :文字顏色(BGR三元組)。7.? thickness (可選):文字粗細(默認1)。8.? lineType (可選):線型(如?cv2.LINE_AA )。9.? bottomLeftOrigin (可選):坐標系原點是否在左下角(默認False,即左上角)。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
字體支持
-
常用字體:
cv2.FONT_HERSHEY_SIMPLEX
(標準)、cv2.FONT_HERSHEY_SCRIPT_SIMPLEX
(手寫體)等。 -
中文支持:需加載中文字體文件(如?
Pillow
?庫配合使用)。
-
-
坐標系統
-
org
?默認基于左上角坐標系((0,0)
?在左上角)。 -
設?
bottomLeftOrigin=True
?可切換為左下角坐標系(數學坐標系)。
-
-
抗鋸齒
-
lineType=cv2.LINE_AA
:文字邊緣平滑(推薦)。 -
lineType=cv2.LINE_8
:快速渲染(默認)。
-
輪廓分析
41.cv2.findContours():
功能 | 從二值圖像中提取輪廓(可用于物體形狀分析、邊緣檢測等)。 |
參數 | 1.?image :輸入二值圖像(通常需先閾值化或邊緣檢測)。2.? mode :輪廓檢索模式(如?cv2.RETR_EXTERNAL ?僅外輪廓)。3.? method :輪廓近似方法(如?cv2.CHAIN_APPROX_SIMPLE ?壓縮冗余點)。4.? offset (可選):輪廓點坐標偏移量(默認?(0,0) )。 |
返回值 | 1.?contours :輪廓列表(每個輪廓為?np.array ?的點集)。2.? hierarchy :輪廓層級關系(樹結構描述父子輪廓)。 |
關鍵參數詳解
1. 檢索模式(mode
)
模式 | 說明 |
---|---|
cv2.RETR_EXTERNAL | 僅檢測最外層輪廓(忽略內部孔洞)。 |
cv2.RETR_LIST | 檢測所有輪廓,無層級關系(hierarchy ?為無效值)。 |
cv2.RETR_TREE | 檢測所有輪廓并建立完整層級樹(記錄父子關系)。 |
2. 近似方法(method
)
方法 | 說明 |
---|---|
cv2.CHAIN_APPROX_NONE | 存儲輪廓所有點(坐標完整,但冗余)。 |
cv2.CHAIN_APPROX_SIMPLE | 壓縮水平、垂直、對角線方向的冗余點(如矩形僅保留4個角點)。 |
42.cv2.drawContours():
功能 | 在圖像上繪制輪廓(支持自定義顏色、線寬、層級過濾)。 |
參數 | 1.?image :輸入圖像(直接修改)。2.? contours :輪廓列表(來自cv2.findContours() )。3.? contourIdx :要繪制的輪廓索引(-1表示全部)。4.? color :輪廓顏色(BGR三元組)。5.? thickness (可選):線寬(默認1,-1表示填充)。6.? lineType (可選):線型(如cv2.LINE_AA )。7.? hierarchy (可選):層級關系(用于過濾)。8.? maxLevel (可選):最大繪制層級(默認0,僅當前層)。9.? offset (可選):輪廓點坐標偏移量。 |
返回值 | 無(直接修改輸入圖像)。 |
關鍵特性
-
輪廓選擇
-
contourIdx=-1
:繪制所有輪廓。 -
contourIdx=2
:僅繪制列表中第3個輪廓(索引從0開始)。
-
-
填充模式
-
thickness=-1
:填充輪廓內部(如生成掩膜)。 -
thickness≥1
:繪制空心輪廓。
-
-
層級控制
-
結合?
hierarchy
?和?maxLevel
?可選擇性繪制子輪廓(如只畫最外層)。
-
43.cv2.approxPolyDP():
功能 | 用Douglas-Peucker算法對輪廓多邊形進行近似(減少頂點數,保持形狀)。 |
參數 | 1.?curve :輸入輪廓(np.array ?形狀為?(N,1,2) )。2.? epsilon :近似精度(值越小,越接近原始輪廓)。3.? closed :是否閉合輪廓(默認?True )。 |
返回值 | 近似后的多邊形點集(np.array ?形狀為?(M,1,2) ,M≤N)。 |
關鍵特性
-
算法原理
-
通過設定最大距離容差(
epsilon
)壓縮冗余頂點,保留關鍵轉折點
-
-
參數選擇
-
epsilon
?通常取輪廓周長的百分比(如?0.02*cv2.arcLength(curve, True)
)。 -
closed=True
?時強制首尾相連。
-
-
應用場景
-
簡化復雜輪廓(如文檔邊界矯正)。
-
形狀分類(通過頂點數判斷矩形、三角形等)。
-
注意事項
-
輸入格式:輪廓必須是?
(N,1,2)
?形狀(與?cv2.findContours()
?輸出一致)。 -
精度控制:
epsilon
?過大可能導致過度簡化(如六邊形變三角形)。 -
閉合性:開放曲線(如折線)需設?
closed=False
。