Sobel
cv::Sobel (
InputArray Src // 輸入圖像
OutputArray dst// 輸出圖像,大小與輸入圖像一致
int depth // 輸出圖像深度.
Int dx. // X方向,幾階導數
int dy // Y方向,幾階導數.
int ksize, SOBEL算子kernel大小,必須是1、3、5、7、
double scale = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
Scharr
cv::Scharr (
InputArray Src // 輸入圖像
OutputArray dst// 輸出圖像,大小與輸入圖像一致
int depth // 輸出圖像深度.
Int dx. // X方向,幾階導數
int dy // Y方向,幾階導數.
double scale = 1
double delta = 0
int borderType = BORDER_DEFAULT
)
Laplacian
拉普拉斯提取邊緣流程:(Sobel同理)
高斯模糊 – 去噪聲GaussianBlur()
轉換爲灰度圖像cvtColor()
拉普拉斯 – 二階導數計算Laplacian()
取絕對值convertScaleAbs()
顯示結果
Laplacian(
InputArray src,
OutputArray dst,
int depth, //深度CV_16S
int kisze, // 3
double scale = 1,
double delta =0.0,
int borderType = 4
)
Canny
Canny算法的步驟
- 高斯模糊 - GaussianBlur
- 灰度轉換 - cvtColor
- 計算梯度 – Sobel/Scharr
- 非最大信號抑制
- 高低閾值輸出二值圖像
Canny算法介紹-高低閾值輸出二值圖像
T1, T2爲閾值,凡是高於T2的都保留,凡是小於T1都丟棄,從高於T2的像素出發,凡是大於T1而且相互連接的,都保留。最終得到一個輸出二值圖像。
推薦的高低閾值比值爲 T2: T1 = 3:1/2:1其中T2爲高閾值,T1爲低閾值
Canny(
InputArray src, // 8-bit的輸入圖像
OutputArray edges,// 輸出邊緣圖像, 一般都是二值圖像,背景是黑色
double threshold1,// 低閾值,常取高閾值的1/2或者1/3
double threshold2,// 高閾值
int aptertureSize,// Soble算子的size,通常3x3,取值3
bool L2gradient // 選擇 true表示是L2來歸一化,否則用L1歸一化
)
src.copyTo(dst, mask);
mask像素不爲0的區域拷貝到dst, 像素爲0的區域不拷貝。
應用:將提取的邊緣做爲mask, 拷貝到原圖中,可以得到彩色的邊緣圖像。
霍夫變換
標準的霍夫變換 cv::HoughLines從平面座標轉換到霍夫空間,
霍夫變換直線概率 cv::HoughLinesP最終輸出是直線的兩個點
檢測前提:邊緣檢測
cv::HoughLines(
InputArray src, // 輸入圖像,必須8-bit的灰度圖像
OutputArray lines, // 輸出的極座標來表示直線
double rho, // 生成極座標時候的像素掃描步長
double theta, //生成極座標時候的角度步長,一般取值CV_PI/180
int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線
double srn=0;// 是否應用多尺度的霍夫變換,如果不是設置0表示經典霍夫變換
double stn=0;//是否應用多尺度的霍夫變換,如果不是設置0表示經典霍夫變換
double min_theta=0; // 表示角度掃描範圍 0 ~180之間, 默認即可
double max_theta=CV_PI
) // 一般情況是有經驗的開發者使用,需要自己反變換到平面空間
cv::HoughLinesP(
InputArray src, // 輸入圖像,必須8-bit的灰度圖像
OutputArray lines, // 輸出的極座標來表示直線(可以Vector<Vec4f> plines 來存儲點)
double rho, // 生成極座標時候的像素掃描步長
double theta, //生成極座標時候的角度步長,一般取值CV_PI/180
int threshold, // 閾值,只有獲得足夠交點的極座標點才被看成是直線
double minLineLength=0;// 最小直線長度
double maxLineGap=0;// 最大間隔
)