2014-03-28 78 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);