- 19
- 0
- 约2.18万字
- 约 23页
- 2016-03-02 发布于江苏
- 举报
从摄像头或者AVI文件中得到视频流.doc
从摄像头或者AVI文件中得到视频流,对视频流进行边缘检测/*程序名称:laplace.c功能:从摄像头或者AVI文件中得到视频流,对视频流进行边缘检测,并输出结果。*/#include cv.h#include highgui.h#include ctype.h#include stdio.h
int main( int argc, 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 );??? else if( argc == 2 )??????? capture = cvCaptureFromAVI( argv[1] );
??? 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 )??????? {??????????? 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);??? return 0;}
用不同的核进行图像的二维滤波
函数cvSmooth实现各种方法的图形平滑。
一般来说,图像平滑主要是为了消除噪声。图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。由于图像的能量主要集在低频部分,而噪声所在频段主要在高频段,因此通常都是采用低通滤波的方法消除噪声。
函数cvFilt
原创力文档

文档评论(0)