2013-05-15 25 views
1

所以我剛剛在兩週前開始使用C++和OpenCV,並不完全確定自己在做什麼。基本上,我想給一個矩形名稱,以便我可以稍後使用它,如果我需要,我不知道如何做到這一點。 我當前的代碼:如何爲CamShift的矩形輸入參數定義一個矩形變量?

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

解決方法:需要的Camshift「矩形」對象不是「矩形」。 '矩形'是繪圖功能,不是結構。哎呀 – cirea22

回答

1

OpenCV rectangle函數向矩形繪製一個矩形,它不返回任何東西。函數簽名(見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); 

因此,繪製矩形到你的第一個參數,命名爲backprojMat。如果你想要一個矩形作爲結構,你可以使用OpenCV Rect結構。請參閱the docs for Rect。就目前而言,由於您的行rectangle trackWindow = rectangle(backproj, p1, p2, Scalar(0,255,0), 3, 8, 0);中的rectangle不是有效類型,因此會出現編譯錯誤。

+0

感謝您的及時迴應,我只是意識到自己。猜猜下次我需要更仔細地閱讀文檔。 – cirea22

+0

@ user2387082文檔可能有點混亂,但他們通常需要了解大部分內容;) – alrikai

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));