#include "stdafx.h"
#include <iostream>
#include <cv.h>
#include <highgui.h>
using namespace cv;
using namespace std;
Rect box;
bool drawing_box = false;
bool gotBB = false;
int *initialBB;
void mouseHandler(int event, int x, int y, int flags, void *param){
switch( event ){
case CV_EVENT_MOUSEMOVE:
if (drawing_box){
box.width = x-box.x;
box.height = y-box.y;
}
break;
case CV_EVENT_LBUTTONDOWN:
drawing_box = true;
box = Rect( x, y, 0, 0 );
break;
case CV_EVENT_LBUTTONUP:
drawing_box = false;
if( box.width < 0 ){
box.x += box.width;
box.width *= -1;
}
if( box.height < 0 ){
box.y += box.height;
box.height *= -1;
}
gotBB = true;
break;
}
}
void drawBox(Mat& image, CvRect box, Scalar color, int thick){
rectangle( image, cvPoint(box.x, box.y), cvPoint(box.x+box.width,box.y+box.height),color, thick);
}
int _tmain(int argc, _TCHAR* argv[])
{
char windowName[1024] = "result";
namedWindow(windowName,CV_WINDOW_AUTOSIZE);
VideoCapture capture;
capture.open(0);
capture.set(CV_CAP_PROP_FRAME_WIDTH,320);
capture.set(CV_CAP_PROP_FRAME_HEIGHT,240);
Mat frame;
cvSetMouseCallback( windowName, mouseHandler, NULL );
GETBOUNDINGBOX:
while(!gotBB)
{
capture>>frame;
drawBox(frame,box,Scalar(255,0,0),2);
imshow(windowName, frame);
if (cvWaitKey(33) == 27)
return 0;
}
if (min(box.width,box.height)<20){
cout << "Bounding box too small, try again." << endl;
gotBB = false;
goto GETBOUNDINGBOX;
}
cvSetMouseCallback( windowName, NULL, NULL );
return 0;
}
OpenCV的rectangle of camera
最新推荐文章于 2024-08-01 02:04:26 发布
本文介绍了一个使用C++实现的基本图像框选程序。该程序利用OpenCV库捕获摄像头视频并允许用户通过鼠标操作定义一个矩形框选区域。程序首先设置摄像头参数,并通过鼠标事件回调函数来绘制矩形框,直到用户完成框选。
摘要由CSDN通过智能技术生成