基于OpenCV的小程序:从摄像头录制视频并保存

直接贴代码

/////////////////////////////////////////////////////////////////////////////////////////////
// CameraRecorder.cpp : 定义控制台应用程序的入口点。
// 从摄像头录制视频并保存为AVI格式
// fengyhack @2012.05.15,Wed.
/////////////////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include "windows.h"
#include "resource.h"

char outfile[100]="Output_";

void setSavePath(void);

int _tmain(int argc, _TCHAR* argv[])
{
	HWND   hWnd=GetConsoleWindow(); //你懂的
	HICON  hIcon=LoadIcon(GetModuleHandle(NULL),
						MAKEINTRESOURCE(IDI_ICON));
	SendMessage(hWnd,WM_SETICON,ICON_SMALL,(LPARAM)hIcon); 
	//设置consoleApp的图标
	system("TITLE Camera Recorder"); //设置窗口标题
	system("COLOR 9E"); //设置窗口淡蓝背景浅黄文字
	setSavePath(); //设置保存路径outfile

	const char* szw="摄像头监视窗口[按ESC退出]";
	CvCapture* cap;
	IplImage*  img;
	CvVideoWriter* vwr=cvCreateVideoWriter(outfile/*输出文件*/,
						CV_FOURCC('D','I','V','X')/*编码格式,DIVX*/,
						10/*帧率,10fps*/,cvSize(800,600)/*尺寸*/,1);
	if(!vwr)
	{
		//...
	}
	else
	{
		//...
	}
	cap=cvCreateCameraCapture(-1);
    if(!cap)
	{
		//...
		cvReleaseVideoWriter(&vwr);
		remove(outfile); //oufile已经无效,必须删除掉
		//...
		return -1;
	}
	else
	{
		printf("摄像采样帧率:10fps,即将开始...\n");
		//...
	}
	cvNamedWindow(szw,0);
	cvMoveWindow(szw,300,20);
	//cvResizeWindow(szw,400,300);

    int n=0; //记录帧数
	while(true)
	{
		//限制时间或帧数
		//...
		img=cvQueryFrame(cap);
		if(img)
		{
			if(n%20==0)
			{
				system("cls");
				printf("按Esc停止录像\n");
			}
			cvWriteFrame(vwr,img);
			cvShowImage(szw,img);
			printf("Frame#%04d ... OK\n",n+1); 
		    n++;
		}
		else
			printf("帧获取失败...\n");
		if(cvWaitKey(60)==27)break;
	}
	cvDestroyWindow(szw);
	cvReleaseCapture(&cap);
	cvReleaseVideoWriter(&vwr);
	//略...
	return 0;
}


void setSavePath(void)
{
	SYSTEMTIME st;
	GetSystemTime(&st); //获取时间,我们在GMT+8时区,将得到的wHour改写为wHour+8
    //略...
	strcat(outfile,".avi"); //安全操作?
}
再截个图:


如果无法正常工作,那么先安装相应的解码器,比如这里,安装DIVX解码器。应该能解决问题的。

你可能感兴趣的:(OpenCV,EmguCV)