# Drawing the Rectangle around the line

Hi All, As shown in the picture. I have two end point of line. I want to draw the rectangle by considering these points are the middle points of the two sides. It will be great, if anyone suggest me the easy way.

Thank you.

edit retag close merge delete

Sort by ยป oldest newest most voted

using minAreaRect you can find a RotatedRect for a line.

and you can change width or height of the RotatedRect

this is output of the code below:

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
// create a Mat
Mat img(400, 400, CV_8UC3, Scalar(127, 127, 127));

// 4 point for 2 lines
Point2f pt1(100, 100), pt2(100, 200), pt3(300, 100), pt4(200, 300);

// visualize lines and points
line(img, pt1, pt2, Scalar(0, 255, 0), 2);
line(img, pt3, pt4, Scalar(0, 255, 0), 2);

circle(img, pt1, 2, Scalar(255, 0, 0), 2);
circle(img, pt2, 2, Scalar(255, 0, 0), 2);
circle(img, pt3, 2, Scalar(255, 0, 0), 2);
circle(img, pt4, 2, Scalar(255, 0, 0), 2);

// find RotatedRect for lines
vector<Point2f> pts1, pts2;
pts1.push_back(pt1);
pts1.push_back(pt2);
pts2.push_back(pt3);
pts2.push_back(pt4);

RotatedRect rr1 = minAreaRect(pts1);
RotatedRect rr2 = minAreaRect(pts2);

// change width or height of the RotatedRect
if(rr1.size.width)
rr1.size.height = 20;
else
rr1.size.width = 20;

if (rr2.size.width)
rr2.size.height = 20;
else
rr2.size.width = 20;

cout << rr1.size << endl;
cout << rr2.size;

// Draw the RotatedRect
Point2f vtx[4];

rr1.points(vtx);
for (int i = 0; i < 4; i++)
line(img, vtx[i], vtx[(i + 1) % 4], Scalar(0, 0, 255), 1);

rr2.points(vtx);
for (int i = 0; i < 4; i++)
line(img, vtx[i], vtx[(i + 1) % 4], Scalar(0, 0, 255), 1);

imshow("RotatedRect Demo", img);
waitKey(0);

return 0;
}

more

Thank you for the answer.

( 2019-01-10 05:00:32 -0500 )edit

Official site

GitHub

Wiki

Documentation

## Stats

Asked: 2018-05-29 04:56:34 -0500

Seen: 1,038 times

Last updated: Dec 29 '18