本次对“视频捕获(VideoCapture)模块”做出分析,给出源代码和对应的程序流程框架。
视频捕获模块的主要功能是设置视频或相机参数,并读取设置配置参数,最后进入帧处理模块的process进程,该模块的源码如下,请重点关注start()函数:
#include "VideoCapture.h"
namespace bgslibrary
{
namespace VC_ROI
{
IplImage* img_input1 = 0;
IplImage* img_input2 = 0;
int roi_x0 = 0;
int roi_y0 = 0;
int roi_x1 = 0;
int roi_y1 = 0;
int numOfRec = 0;
int startDraw = 0;
bool roi_defined = false;
bool use_roi = true;
bool disable_event = false;
void reset(void)
{
disable_event = false;
startDraw = false;
}
void VideoCapture_on_mouse(int evt, int x, int y, int flag, void* param)
{
if (use_roi == false || disable_event == true)
return;
if (evt == CV_EVENT_LBUTTONDOWN)
{
if (!startDraw)
{
roi_x0 = x;
roi_y0 = y;
startDraw = 1;
}
else
{
roi_x1 = x;
roi_y1 = y;
startDraw = 0;
roi_defined = true;
disable_event = true;
}
}
if (evt == CV_EVENT_MOUSEMOVE && startDraw)
{
//redraw ROI selection
img_input2 = cvCloneImage(img_input1);
cvRectangle(img_input2, cvPoint(roi_x0, roi_y0), cvPoint(x, y), CV_RGB(255, 0, 0), 1);
cvShowImage("Input", img_input2);
cvReleaseImage(&img_in