如何为CamShift的矩形输入参数定义矩形变量?

时间:2013-05-15 18:29:14

标签: c++ opencv

所以我在两周前开始使用c ++和OpenCV,并不完全确定我在做什么。基本上,我想给一个矩形一个名字,以便我可以在以后使用它,如果我需要,我不知道该怎么做。  我目前的代码:

Point p1= Point(0,0);
Point p2= Point(backproj.rows/4,backproj.cols/4);

rectangle trackWindow = rectangle(backproj, p1, p2, Scalar(0,255,0), 3, 8, 0);
RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));

这会抛出错误:

CamShift_Upload.cpp:108:12: error: expected ‘;’ before ‘trackWindow’
CamShift_Upload.cpp:108:79: error: statement cannot resolve address of overloaded function
CamShift_Upload.cpp:109:44: error: ‘trackWindow’ was not declared in this scope

所以我显然没有按照我应该的方式声明矩形变量,但我不确定正确的方法。任何帮助都会很棒。

2 个答案:

答案 0 :(得分:1)

OpenCV rectangle函数将一个矩形绘制到Mat,它不会返回任何内容。函数签名(参见the docs here)是

void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0);

或等效,

void rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shift=0);

因此,矩形将被绘制到您的第一个参数Mat,名为backproj。如果要将矩形作为结构,可以使用OpenCV Rect结构。见the docs for Rect。就目前而言,您遇到编译错误,因为行rectangle中的rectangle trackWindow = rectangle(backproj, p1, p2, Scalar(0,255,0), 3, 8, 0);不是有效类型。

答案 1 :(得分:0)

rectangle是绘制矩形的函数调用,您可能想要创建一个Rect结构,如:

Rect trackWindow(0,0,backproj.rows/4,backproj.cols/4);
RotatedRect trackBox = CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));