功能:使用Sobel算子對圖像邊緣檢測
函數形式:
void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size );
參數列表:
src 輸入圖像
dst 輸出圖像
xorder x方向上的差分階數
yorder y 方向上的差分階數
aperture_size 擴展 Sobel 核的大小,必須是 1, 3, 5 或7
步驟:
1. 基於高斯核函數對圖像灰度矩陣每一點進行加權求和,濾波,去噪
2. 計算梯度幅值,確定圖像各點鄰域強度變化,將強度值有明顯變化的點凸顯出來
3. 通過閾值化方法對邊緣點取捨
程序應用示例:
#include "cv.h"
#include "highgui.h"
#include "stdio.h"
#include "stdlib.h"
int main(int argc,char ** argv)
{
IplImage * src, *dst ,*gray;
src = cvLoadImage("1.jpg");
dst = cvCreateImage(cvGetSize(src),IPL_DEPTH_16S,1) ; //輸出圖像的深度,設定爲CV_16S避免外溢
gray=cvCreateImage(cvGetSize(src),src->depth,1); //分配圖像空間
cvCvtColor(src,gray,CV_BGR2GRAY); //輸入圖像灰度處理
cvNamedWindow("src",0) ;
cvShowImage("src",src);
cvNamedWindow("sobel",0) ;
cvSobel(gray,dst,0,1,5); //檢測
cvShowImage("sobel",dst);
cvWaitKey(0) ;
cvReleaseImage(&src) ;
cvReleaseImage(&dst);
return 0;
}