边缘提取.docx

上传人:b****5 文档编号:5026857 上传时间:2022-12-12 格式:DOCX 页数:8 大小:489.09KB
下载 相关 举报
边缘提取.docx_第1页
第1页 / 共8页
边缘提取.docx_第2页
第2页 / 共8页
边缘提取.docx_第3页
第3页 / 共8页
边缘提取.docx_第4页
第4页 / 共8页
边缘提取.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

边缘提取.docx

《边缘提取.docx》由会员分享,可在线阅读,更多相关《边缘提取.docx(8页珍藏版)》请在冰豆网上搜索。

边缘提取.docx

边缘提取

 

数字图像处理报告

 

学院:

信息科学与电气工程

班级:

学生姓名:

学号:

指导老师:

张广渊

提交日期:

2014.05.05

 

课程实验报告

实验题目:

_____边缘提取______

姓名:

______学号:

______

班级:

____指导教师:

____张广渊____

实验概述

【实验目的及要求】

本次试验的目的为图像的边缘提取。

【实验原理】

 通过VC++连接openCV显示图像。

因为边缘和轮廓都位于灰度突变的地方。

所以锐化算法的实现是基于微分作用。

就是加强图像中景物的细节边缘和轮廓,使灰度反差增强。

【实验环境】

安装openCV

 首先,将E:

\OpenCV\bin加入到环境变量PATH

然后,配置VC++环境

菜单Tools->Options->Directories:

选择includefiles,sourcefiles

Libraryfiles,在下方填入路径

建立新工程后,在工程设置里添加路径cxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib

 

实验内容

【实验过程】(实验步骤、记录、数据、分析)

视频边缘提取代码如下

/*

程序名称:

laplace.c

功能:

从摄像头或者AVI文件中得到视频流,对视频流进行边缘检测,并输出结果。

*/

#include"cv.h"

#include"highgui.h"

#include

#include

intmain(intargc,char**argv)

{

IplImage*laplace=0;

IplImage*colorlaplace=0;

IplImage*planes[3]={0,0,0};//多个图像面

CvCapture*capture=0;

//下面的语句说明在命令行执行程序时,如果指定AVI文件,那么处理从

//AVI文件读取的视频流,如果不指定输入变量,那么处理从摄像头获取

//的视频流

if(argc==1||(argc==2&&strlen(argv[1])==1&&isdigit(argv[1][0])))

capture=cvCaptureFromCAM(argc==2?

argv[1][0]-'0':

0);

elseif(argc==2)

capture=cvCaptureFromAVI(argv[1]);

if(!

capture)

{

fprintf(stderr,"Couldnotinitializecapturing...\n");

return-1;

}

cvNamedWindow("Laplacian",0);

//循环捕捉,直到用户按键跳出循环体

for(;;)

{

IplImage*frame=0;

inti;

frame=cvQueryFrame(capture);

if(!

frame)

break;

if(!

laplace)

{

for(i=0;i<3;i++)

planes[i]=cvCreateImage(cvSize(frame->width,frame->height),8,1);

laplace=cvCreateImage(cvSize(frame->width,frame->height),

IPL_DEPTH_16S,1);

colorlaplace=cvCreateImage(cvSize(frame->width,frame->height),8,3);

}

cvCvtPixToPlane(frame,planes[0],planes[1],planes[2],0);

for(i=0;i<3;i++)

{

cvLaplace(planes[i],laplace,3);//3:

aperture_size

cvConvertScaleAbs(laplace,planes[i],1,0);//planes[]=ABS(laplace)

}

cvCvtPlaneToPix(planes[0],planes[1],planes[2],0,colorlaplace);

colorlaplace->origin=frame->origin;

cvShowImage("Laplacian",colorlaplace);

if(cvWaitKey(10)>=0)

break;

}

cvReleaseCapture(&capture);

cvDestroyWindow("Laplacian");

return0;

}

Canny获取边缘的代码:

#include"cv.h"

#include"highgui.h"

charwndname[]="Edge";

chartbarname[]="Threshold";

intedge_thresh=1;

IplImage*image=0,*cedge=0,*gray=0,*edge=0;

//定义跟踪条的callback函数

voidon_trackbar(inth)

{

cvSmooth(gray,edge,CV_BLUR,3,3,0);

cvNot(gray,edge);

//对灰度图像进行边缘检测

cvCanny(gray,edge,(float)edge_thresh,(float)edge_thresh*3,3);

cvZero(cedge);

//copyedgepoints

cvCopy(image,cedge,edge);

//显示图像

cvShowImage(wndname,cedge);

}

intmain(intargc,char**argv)

{

char*filename=argc==2?

argv[1]:

(char*)"fruits.jpg";

if((image=cvLoadImage(filename,1))==0)

return-1;

//Createtheoutputimage

cedge=cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,3);

//将彩色图像转换为灰度图像

gray=cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);

edge=cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);

cvCvtColor(image,gray,CV_BGR2GRAY);

//Createawindow

cvNamedWindow(wndname,1);

//createatoolbar

cvCreateTrackbar(tbarname,wndname,&edge_thresh,100,on_trackbar);

//Showtheimage

on_trackbar(0);

//Waitforakeystroke;thesamefunctionarrangeseventsprocessing

cvWaitKey(0);

cvReleaseImage(&image);

cvReleaseImage(&gray);

cvReleaseImage(&edge);

cvDestroyWindow(wndname);

return0;

}

实验结果:

视频边缘提取结果如图:

 

Canny获取边缘如图:

 

 

小结

 

 通过本次试验,我学会了边缘提取原理。

通过这个原理实践了对视频和图像的边缘提取。

对于代码还是没有完全看懂。

但边缘提取的原理已经明白了。

还需要根据老师的讲解理解一下代码。

指导教师评语及成绩

评语:

 

 

 

 

 

成绩:

          指导教师签名:

                                              批阅日期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1