分别对电脑摄像头输入的影像进行各种处理。
#include "highgui.h"
#include "cv.h"
#include "stdio.h"
#include <opencv2/legacy/legacy.hpp>
//*****************************************************
//主函数
//*****************************************************
int main()
{
/*从摄像头载入视频数据*/
CvCapture *capture = NULL;
capture = cvCreateCameraCapture(1); //如果有两个摄像头,参数为1时使用USB外接摄像头,OUT_CAMERA
/*判断视频信息是否有效*/
if (!capture)
{
printf( "failed to open USB camera.\n" );
return -1;
}
/*生成显示视频的窗口*/
cvNamedWindow( "sorce", CV_WINDOW_NORMAL );
cvNamedWindow( "gauss", CV_WINDOW_NORMAL );
cvNamedWindow( "open", CV_WINDOW_NORMAL );
cvNamedWindow( "gray", CV_WINDOW_NORMAL );
cvNamedWindow( "pyramid", CV_WINDOW_NORMAL );
cvNamedWindow( "thresh", CV_WINDOW_NORMAL );
/*定义视频帧与对帧进行图像处理后的各个图像*/
IplImage *frame, *gauss, *open, *gray, *pyramid, *thresh;
/*对金字塔分割作准备*/
CvSeq* comp = NULL;
CvMemStorage* storage=cvCreateMemStorage(0);
assert( storage!=NULL );
while (1)
{
/*抽取帧*/
frame = cvQueryFrame( capture );
/*图像初始化*/
gauss = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
open = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
gray = cvCreateImage( cvGetSize(frame), frame->depth, 1 );
pyramid = cvCreateImage( cvGetSize(frame), frame->depth, frame->nChannels );
thresh = cvCreateImage( cvGetSize(frame), frame->depth, 1 );
/*高斯模糊处理,输出gauss*/
cvSmooth( frame, gauss, CV_GAUSSIAN, 11, 11 );
/*开运算,输出open*/
cvErode( frame, open );
cvDilate( open, open );
/*色彩处理,输出单通道灰度图像gray*/
cvCvtColor( frame, gray, CV_RGB2GRAY );
/*金字塔分割,输出pyramid*/
cvPyrSegmentation( frame, pyramid, storage, &comp, 4, 130, 30 );
/*阈值化,输出thresh*/
cvThreshold( gray, thresh, 200, 255, CV_THRESH_BINARY );
if (!frame)
break;
/*循环显示图像,即播放视频*/
cvShowImage( "sorce", frame );
cvShowImage( "gauss", gauss );
cvShowImage( "open", open );
cvShowImage( "gray", gray );
cvShowImage( "pyramid", pyramid );
cvShowImage( "thresh", thresh );
/*按ESC键退出*/
char c = cvWaitKey(33);
if (c==27)
break;
}
cvReleaseCapture( &capture );
cvDestroyAllWindows();
return 0;
}