1、边缘提取数字图像处理报告学 院: 信息科学与电气工程 班 级: 学生姓名: 学 号: 指导老师: 张广渊 提交日期: 2014.05.05 课程实验报告实验题目:_边缘提取_姓名:_ _ 学号:_ _ 班级: _ _指导教师: _张广渊_实验概述【实验目的及要求】本次试验的目的为图像的边缘提取。【实验原理】通过VC+连接openCV显示图像。因为边缘和轮廓都位于灰度突变的地方。所以锐化算法的实现是基于微分作用。就是加强图像中景物的细节边缘和轮廓,使灰度反差增强。【实验环境】安装openCV首先,将E: OpenCVbin加入到环境变量PATH然后,配置VC+环境菜单Tools-Options-
2、Directories:选择include files,source filesLibrary files,在下方填入路径建立新工程后,在工程设置里添加路径 cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib实验内容【实验过程】(实验步骤、记录、数据、分析)视频边缘提取代码如下/*程序名称:laplace.c功能:从摄像头或者AVI文件中得到视频流,对视频流进行边缘检测,并输出结果。*/#include cv.h#include highgui.h#include #include int main( int argc, char*
3、 argv ) IplImage* laplace = 0; IplImage* colorlaplace = 0; IplImage* planes3 = 0, 0, 0 ; / 多个图像面 CvCapture* capture = 0; / 下面的语句说明在命令行执行程序时,如果指定AVI文件,那么处理从 / AVI文件读取的视频流,如果不指定输入变量,那么处理从摄像头获取 / 的视频流if( argc = 1 | (argc = 2 & strlen(argv1) = 1 & isdigit(argv10) capture = cvCaptureFromCAM( argc = 2 ? a
4、rgv10 - 0 : 0 ); else if( argc = 2 ) capture = cvCaptureFromAVI( argv1 ); if( !capture ) fprintf(stderr,Could not initialize capturing.n); return -1; cvNamedWindow( Laplacian, 0 ); / 循环捕捉,直到用户按键跳出循环体 for(;) IplImage* frame = 0; int i; frame = cvQueryFrame( capture ); if( !frame ) break; if( !laplace
5、 ) for( i = 0; i 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, planes0, planes1, planes2, 0 ); for( i = 0; i origin = frame-origin; cvShowImage
6、(Laplacian, colorlaplace ); if( cvWaitKey(10) = 0 ) break; cvReleaseCapture( &capture ); cvDestroyWindow(Laplacian); return 0;Canny获取边缘的代码:#include cv.h#include highgui.hchar wndname = Edge;char tbarname = Threshold;int edge_thresh = 1;IplImage *image = 0, *cedge = 0, *gray = 0, *edge = 0;/ 定义跟踪条的 c
7、allback 函数void on_trackbar(int h) cvSmooth( gray, edge, CV_BLUR, 3, 3, 0 ); cvNot( gray, edge ); / 对灰度图像进行边缘检测 cvCanny(gray, edge, (float)edge_thresh, (float)edge_thresh*3, 3); cvZero( cedge ); / copy edge points cvCopy( image, cedge, edge ); / 显示图像 cvShowImage(wndname, cedge);int main( int argc, ch
8、ar* argv ) char* filename = argc = 2 ? argv1 : (char*)fruits.jpg; if( (image = cvLoadImage( filename, 1) = 0 ) return -1; / Create the output image cedge = cvCreateImage(cvSize(image-width,image-height), IPL_DEPTH_8U, 3); / 将彩色图像转换为灰度图像 gray = cvCreateImage(cvSize(image-width,image-height), IPL_DEPT
9、H_8U, 1); edge = cvCreateImage(cvSize(image-width,image-height), IPL_DEPTH_8U, 1); cvCvtColor(image, gray, CV_BGR2GRAY); / Create a window cvNamedWindow(wndname, 1); / create a toolbar cvCreateTrackbar(tbarname, wndname, &edge_thresh, 100, on_trackbar); / Show the image on_trackbar(0); / Wait for a
10、key stroke; the same function arranges events processing cvWaitKey(0); cvReleaseImage(&image); cvReleaseImage(&gray); cvReleaseImage(&edge); cvDestroyWindow(wndname); return 0;实验结果:视频边缘提取结果如图:Canny获取边缘如图:小结通过本次试验,我学会了边缘提取原理。通过这个原理实践了对视频和图像的边缘提取。对于代码还是没有完全看懂。但边缘提取的原理已经明白了。还需要根据老师的讲解理解一下代码。指导教师评语及成绩评语:成绩: 指导教师签名: 批阅日期:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1