簡單記錄一下OpenCV的幾種邊緣檢測函數的用法。
邊緣檢測算法
以Sobel邊緣檢測算法為例。
Sobel卷積核模板為:

偏導公式為:
卷積核模板的圖片又是從網上抄來的,實際上我都不是很確定
不過到這里其實還只是做了一半,因為還只是算出來了

公式(8.1)是梯度向量,梯度幅值為用公式(8.2)。但在實際使用中,為了提高計算的速度,我們可以用式(8.3)、(8.4)(8.5)來近似。(8.6)是梯度向量的方向角公式。
所以,在計算出(i,j)處的
邊緣檢測大體都是這樣,不同的算子只是卷積核不同。其實只要理解了圖像數據是怎么進行卷積計算的,都可以自己設計算子,當然效果要好才有用。
附上一個OpenCV的幾個邊緣檢測函數的簡單使用的栗子。
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
using namespace cv;
int main(int argc, char* argv[])
{
Mat src = imread("F:\\picture\\cv53.jpg");
Mat dst;
//輸入圖像
//輸出圖像
//輸入圖像顏色通道數
//x方向階數
//y方向階數
//Sobel(src,dst,src.depth(),1,1);
//imwrite("sobel.jpg",dst);
//輸入圖像
//輸出圖像
//輸入圖像顏色通道數
//Laplacian(src,dst,src.depth());
//imwrite("laplacian.jpg",dst);
//輸入圖像
//輸出圖像
//彩色轉灰度
cvtColor(src,src,CV_BGR2GRAY); //canny只處理灰度圖
//輸入圖像
//輸出圖像
//低閾值
//高閾值,opencv建議是低閾值的3倍
//內部sobel濾波器大小
Canny(src,dst,50,150,3);
imwrite("canny71.jpg",dst);
imshow("dst",dst);
waitKey();
return 0;
}
想測試那種邊緣檢測,就把注釋修改一下即可。