1

所以我大约两周前才开始使用 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

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

4

2 回答 2

1

OpenCVrectangle函数在 Mat 上绘制一个矩形,它不返回任何内容。函数签名(请参阅此处的文档)是

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. 如果你想要一个矩形作为结构,你可以使用 OpenCVRect结构。请参阅Rect 的文档。就目前而言,您有一个编译错误,因为rectangle您的行rectangle trackWindow = rectangle(backproj, p1, p2, Scalar(0,255,0), 3, 8, 0);不是有效类型。

于 2013-05-15T18:39:07.383 回答
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 ));
于 2013-05-15T18:41:24.047 回答