功能:使用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;
}