Sobel,LoG,Canny边缘提取算法的实现和比较

#include "stdafx.h"
#include "cv_LoG.h"

#include "highgui.h"
#include "cv.h"

/*
opencv_core231d.lib
opencv_highgui231d.lib
opencv_imgproc231d.lib

e:\\a_square.jpg
*/
#ifdef _DEBUG
#define new DEBUG_NEW
#endif

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode = 0;
	if(argc<2)
	{
		printf("Input Wrong!\n");
		return 0;
	}
	IplImage *img;
	img=cvLoadImage(argv[1],0);

	IplImage *imgLoG,*img16S,*imgSobel,*imgSobelx,*imgSobely,*imgCanny;
	CvScalar mean;
	img16S=cvCreateImage(cvSize(img->width,img->height),IPL_DEPTH_16S,img->nChannels);
	
	imgLoG=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels);
	cvSmooth(img,img,CV_GAUSSIAN,3,3);	//高斯模糊
	cvLaplace(img,img16S,3);			//拉普拉斯算子
	cvConvertScaleAbs(img16S,imgLoG,1);
	//mean=cvAvg(imgLoG);
	//cvThreshold(imgLoG,imgLoG,mean.val[0],256,CV_THRESH_BINARY);

	imgSobel=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels);
	imgSobelx=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels);
	imgSobely=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels);
	cvSobel(img,img16S,1,0,3);
	cvConvertScaleAbs(img16S,imgSobelx,1);
	cvSobel(img,img16S,0,1,3);
	cvConvertScaleAbs(img16S,imgSobely,1);
	cvAdd(imgSobelx,imgSobely,imgSobel);	//使用两个方向的梯度绝对值和近似梯度模
	//mean=cvAvg(imgSobel);
	//cvThreshold(imgSobel,imgSobel,mean.val[0],256,CV_THRESH_BINARY);

	imgCanny=cvCreateImage(cvSize(img->width,img->height),img->depth,img->nChannels);
	cvCanny(img,imgCanny,150,50);
	
	cvSaveImage("E:\\EdgeImages\\img.jpg",img);
	cvSaveImage("E:\\EdgeImages\\imgLoG.jpg",imgLoG);
	cvSaveImage("E:\\EdgeImages\\imgSobel.jpg",imgSobel);
	cvSaveImage("E:\\EdgeImages\\imgCanny.jpg",imgCanny);

	cvNamedWindow("Original Image");
	cvShowImage("Original Image",img);
	cvNamedWindow("LoG Image");
	cvShowImage("LoG Image",imgLoG);
	cvNamedWindow("Sobel Image");
	cvShowImage("Sobel Image",imgSobel);
	cvNamedWindow("Canny Image");
	cvShowImage("Canny Image",imgCanny);
	cvWaitKey(0);
	cvReleaseImage(&img);
	cvReleaseImage(&imgLoG);
	cvReleaseImage(&imgSobel);
	cvReleaseImage(&imgCanny);
	cvReleaseImage(&imgSobelx);
	cvReleaseImage(&imgSobely);
	cvReleaseImage(&img16S);
	return 1;
	return nRetCode;
}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值