2014-03-28 75 views
6

我有兩個點(假定爲矩形,它的左上角&右下角)。將兩點轉換爲矩形(cv :: Rect)

Point pTopLeft; 
Point pBottomRight; 

我想制定一個cv :: Rect使用這些點。所以,我試過

cv::Rect rRect; 
rRect.tl() = pTopLeft; 
rRect.br() = pBottomRight; 

沒有錯誤。但Rect似乎沒有包含任何內容。即,兩個點都指示爲零。那麼,我如何用任意兩點制定一個新的Rect對象?

回答

10

因爲矩形:: TL ()和Rect :: br()只是返回拷貝,不是引用,試試構造函數:

cv::Rect rRect(pTopLeft, pBottomRight); 
+0

將值賦給返回函數一點也不好。但是我的好奇心使用兩點來制定Rect對象,導致我忽略了這一點。 –

+1

請注意,正確的底點是排他性的。如果你想包含點,請嘗試'cv :: Rect rRect(pTopLeft,pBottomRight + cv :: Point(1,1));' –

6

你必須從你的兩點計算基本信息。寬度和高度,然後使用下面的構造函數創建新的對象:


(Object) rect(x, y, width, height) 

pTopLeft.x = x 

pTopLeft.y = y 

pBottomRight.x - pTopLeft.x = width 

pTopLeft.y - pBottomRight.y = height 
3

你可以把它這種方式也

Point pTopLeft; 
Point pBottomRight; 
cv::Rect rRect(pTopLeft.x,pTopLeft.y,pBottomRight.x-pTopLeft.x,pBottomRight.y-pTopLeft.y);