I want to draw a rectangle in OpenCV by using this function:
rectangle(Mat& img, Rect rec, const Scalar& color, int thickness=1, int lineType=8, int shif
The cv::rectangle
function that accepts two cv::Point
's takes both the top left and the bottom right corner of a rectangle (pt1 and pt2 respectively in the documentation). If that rectangle is used with the cv::rectangle
function that accepts a cv::Rect
, then you will get the same result.
// just some valid rectangle arguments
int x = 0;
int y = 0;
int width = 10;
int height = 20;
// our rectangle...
cv::Rect rect(x, y, width, height);
// and its top left corner...
cv::Point pt1(x, y);
// and its bottom right corner.
cv::Point pt2(x + width, y + height);
// These two calls...
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0));
// essentially do the same thing
cv::rectangle(img, rect, cv::Scalar(0, 255, 0))
Here's a simple example of drawing a pre-defined rectangle on an image
using namespace cv;
int main(){
Mat img=imread("myImage.jpg");
Rect r=Rect(10,20,40,60);
//create a Rect with top-left vertex at (10,20), of width 40 and height 60 pixels.
rectangle(img,r,Scalar(255,0,0),1,8,0);
//draw the rect defined by r with line thickness 1 and Blue color
imwrite("myImageWithRect.jpg",img);
return 0;
}