所以我在两周前开始使用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
所以我显然没有按照我应该的方式声明矩形变量,但我不确定正确的方法。任何帮助都会很棒。
答案 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 ));