opencv实现边缘提取方法总结

分别用Canny算子、sobel算子和Laplace算子实现边缘提取,代码如下:

// 边缘提取.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <cmath>
using namespace std;
using namespace cv;

int main(int argc ,char ** argv)
{
#if 0
	//canny算子
	IplImage *src =cvLoadImage("E:\\picture\\lena.bmp");
	IplImage *gray=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U,1);
	cvCvtColor(src,gray,CV_RGB2GRAY);
	IplImage * pCannyImg=cvCreateImage(cvGetSize(gray),IPL_DEPTH_8U,1);
	cvCanny(gray,pCannyImg,50,150,3);
        //创建窗口
        cvNamedWindow("src", 1);
        cvNamedWindow("canny",1);


        //显示图像
        cvShowImage( "src", src );
        cvShowImage( "canny", pCannyImg );

        cvWaitKey(0); //等待按键

        //销毁窗口
        cvDestroyWindow( "src" );
        cvDestroyWindow( "canny" );
        //释放图像
        cvReleaseImage( &src ); 
        cvReleaseImage( &pCannyImg );

#endif
#if 0
		//Sobel算子
		Mat src=imread("e:\\picture\\lena.bmp");
		Mat dst_x,dst_y,dst;
		Sobel(src,dst_x,src.depth(),1,0);
		Sobel(src,dst_y,src.depth(),0,1);
		convertScaleAbs(dst_x, dst_x);  //使用线性变换转换输入数组元素成8位无符号整型
        convertScaleAbs(dst_y, dst_y); 
		addWeighted( dst_x, 0.5, dst_y, 0.5, 0, dst); 
		imshow("dst",dst);
		imwrite("Sobel_lena.bmp",dst);
		namedWindow("src");
		imshow("src",src);
		waitKey(0);

#endif
#if 1
		//LapLace 拉普拉斯算子
		Mat src=imread("e:\\picture\\lena.bmp");
		Mat dst;
		Laplacian(src,dst,src.depth(),3);
		convertScaleAbs(dst,dst);
		namedWindow("src");
		namedWindow("dst");
		imshow("src",src);
		imshow("dst",dst);
		waitKey(0);
		
#endif


    return 0;
}

原图lena.bmp


Canny算子实现结果:


sobel算子实现结果:


Laplace算子实现结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值