#include <stdio.h>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <iostream>
#include <vector>
using namespace std;
CvPoint prev_pt;
CvPoint pt;
vector <CvPoint> vec;//存放snake能量曲线的点集
IplImage* pFrame = NULL;
void DrawRectangle()
{
cvRectangle(pFrame, prev_pt, pt, CV_RGB(255, 0 ,0), 1, 8, 0);
cvShowImage("video", pFrame);
}
void on_mouse(int event, int w, int v, int flags, void* chu)
{
if( !pFrame )
return;
if( event == CV_EVENT_LBUTTONDOWN )
{
vec.clear();//每次重新画矩形前vec清空,这样画出一个新的矩形(以前的矩形自动消失)
prev_pt.x = w;
prev_pt.y = v;
}
else if( event == CV_EVENT_LBUTTONUP )
{
pt.x = w;
//pt.y = pFrame->height-v;
pt.y =v;
DrawRectangle();
}
}
int main()
{
CvCapture* pCapture = NULL;
long int num = 0;
cvNamedWindow("video", 1);
//打开视频文件,cvCaptureFromFile初始化从文件中获取视频
if( !(pCapture = cvCaptureFromFile("test.avi")) )
{
fprintf(stderr, "Can not open video file!\n");
return -1;
}
//逐帧读取视频,cvQueryFrame是从摄像头或者文件中抓取并返回一帧
while (pFrame = cvQueryFrame(pCapture))
{
num++;
//显示图像
cvSetMouseCallback( "video", on_mouse, 0 );
cvShowImage("video", pFrame);
if( cvWaitKey(100) >= 0 )
break;
}
cvDestroyAllWindows();
cvReleaseCapture(&pCapture);
return 0;
}
- 1
- 2
前往页