Reputation: 333
I have two points (assumed to be from a rectangle and are its top-left corner & bottom-right corner).
Point pTopLeft;
Point pBottomRight;
I want to formulate a cv::Rect
using these points. So, I tried
cv::Rect rRect;
rRect.tl() = pTopLeft;
rRect.br() = pBottomRight;
There is no error. But the Rect
seems to be containing nothing. i.e., both the points are indicating zero. So, How do I formulate a new Rect
object with arbitrary two points?
Upvotes: 11
Views: 36309
Reputation: 23515
You have to calculate basic information from your two points: width and height. Then, create a new object using the following constructor :
(Object) rect(x, y, width, height)
pTopLeft.x = x
pTopLeft.y = y
pBottomRight.x - pTopLeft.x = width
pTopLeft.y - pBottomRight.y = height
Upvotes: 7
Reputation: 39796
Since Rect::tl()
and Rect::br()
just return copies, not references, try a constructor:
cv::Rect rRect(pTopLeft, pBottomRight);
Upvotes: 19
Reputation: 14053
You can make it this way also,
Point pTopLeft;
Point pBottomRight;
cv::Rect rRect(pTopLeft.x,pTopLeft.y,pBottomRight.x-pTopLeft.x,pBottomRight.y-pTopLeft.y);
Upvotes: 5