将两个点转换为矩形(cv :: Rect)

11

我有两个点(假设它们来自一个矩形,分别是它的左上角和右下角)。

Point pTopLeft;
Point pBottomRight;

我想使用这些点来创建一个cv::Rect。因此,我尝试了以下代码:

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

没有错误。但是Rect似乎包含了什么都没有的情况,即两个点都指向零。那么,我该如何使用任意两个点创建一个新的Rect对象?

3个回答

19

由于Rect::tl()Rect::br()只返回副本而不是引用,请尝试使用构造函数:

cv::Rect rRect(pTopLeft, pBottomRight);

将一个值赋给返回函数并不是很好的做法。但是,我的好奇心促使我忽略了这种思维方式,试图用两个点来构建一个矩形对象。 - Karthik_elan
2
请注意,右下角的点是不包括在内的。如果您想要包括这个点,请尝试使用 cv::Rect rRect(pTopLeft, pBottomRight+cv::Point(1,1)); - Hyunjun Kim

7
您需要从两个点:宽度和高度计算基本信息。然后,使用以下构造函数创建一个新对象:


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

pTopLeft.x = x

pTopLeft.y = y

pBottomRight.x - pTopLeft.x = width

pTopLeft.y - pBottomRight.y = height

5
你也可以这样做,
Point pTopLeft;
Point pBottomRight;
cv::Rect rRect(pTopLeft.x,pTopLeft.y,pBottomRight.x-pTopLeft.x,pBottomRight.y-pTopLeft.y);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接