#include <iostream>
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
#include<time.h>
IplImage *image1 = 0;
IplImage *image = 0;
bool bLButtonDown = false;
CvPoint pt, pt1,pt2;
char* strImageDir = "C:\\123"; //截取图像存放目录
CvRect selectedROI;
CvRect reg;
//鼠标事件
void on_mouse( int event, int x, int y, int flags, void* param )
{
if( !image )
return;
if( event == CV_EVENT_LBUTTONDOWN )
{
bLButtonDown = true;
pt1.x = x;
pt1.y = y;
selectedROI.x = x;
selectedROI.y = y;
}
else if ( event == CV_EVENT_MOUSEMOVE )
{
pt2.x = x;
pt2.y = y;
if(bLButtonDown)
{
image1 = cvCreateImage( cvGetSize(image), 8, 3 );
image1->origin = image->origin;
cvCopy( image, image1, 0 ); //复制图像数据
image->roi = NULL;
image1->roi = NULL;
if(pt2.x>image->width)
pt2.x = image->width;
if(pt2.y>image->height)
pt2.y = image->height;
CvFont font;
double hScale=1.0;
double vScale=1.0;
int lineWidth=1;
cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX|CV_FONT_ITALIC, hScale,vScale,0,lineWidth);
char text[200];
reg.x = pt1.x;
reg.y = pt1.y;
reg.height = abs (pt2.y - pt1.y);
reg.width = abs (pt2.x - pt1.x);
sprintf(text, "(%dx%d)",reg.width, reg.height);
cvPutText (image1,text,cvPoint(10,30), &font, cvScalar(255,255,0)); //图片画文字
cvRectangle(image1, pt1, pt2, CV_RGB(255,0,0), 1); //图片画矩形
cvShowImage("Harr Positive Image Creator",image1);
}
}
else if ( event == CV_EVENT_LBUTTONUP )
{
bLButtonDown = false;
//下面确定鼠标选取的感兴趣区域
if( pt1.x > pt2.x)
{
selectedROI.x = pt2.x;
}
if ( pt2.y < pt1.y )
{
selectedROI.y = pt2.y;
}
selectedROI.width = abs(pt1.x - pt2.x);
selectedROI.height = abs(pt1.y - pt2.y);
}
}
int main(int argc, char** argv[])
{
int i=0;
CvCapture* capture = 0;
IplImage* frame = 0;
int c;
char* video;
video="C:\\006窗口过程_baofeng.avi"; //加载avi视频
capture = cvCaptureFromAVI(video);
if( !capture )
{
fprintf(stderr,"Could not initialize capturing...\n");
return -1;
}
cvNamedWindow("Harr Positive Image Creator", CV_WINDOW_AUTOSIZE);
cvSetMouseCallback("Harr Positive Image Creator", on_mouse, 0);
srand((unsigned)time(NULL));//种子要放在for()外边,才能产生不同的随机数
for(;;)
{
frame = cvQueryFrame( capture );
if( !frame ) break;
image = cvCreateImage( cvGetSize(frame), 8, 3 );
image->origin = frame->origin;
cvCopy( frame, image, 0 );
cvShowImage("Harr Positive Image Creator", image);
char c = cvWaitKey(20);//等待50ms,设置每帧的间隔事件为50ms
if(bLButtonDown)
{
while(bLButtonDown) //按下鼠标左键
{
c = cvWaitKey(500);
}
if(selectedROI.width > 0 && selectedROI.height > 0)
{
//下面保存鼠标拖拽区域图像
float scale= ((float)rand())/RAND_MAX;
char f[512] ;
// sprintf(f, "%s%d%s", "image", i, ".jpg");//保存的图片名
sprintf(f,"%s\\密密麻麻.jpg",strImageDir,i/10, i);
IplImage* negImage =0;
negImage = cvCreateImage(cvSize (selectedROI.width, selectedROI.height), image->depth, image->nChannels);
cvSetImageROI (image, selectedROI);
cvCopy(image,negImage);
cvSaveImage(f, negImage);
cvResetImageROI(image);
i++;
c = cvWaitKey(100);
}
}
if( c == 27 ) break;//如果有按键ESC,停止播放,退出。
}
cvReleaseCapture( &capture );
cvDestroyAllWindows();
return 0;
}
此源代码是在安装了opencv的前期下才可以实现的,并且需要对其工程属性进行配置,具体的方法可在百度上找,一般全一点的都具有简单的属性配置及安装步骤。