Opencv3中Rect和rectangle函式
一、Rect類
Rect_(),形參列表為空,即定義一個空視窗(預設值為:x=y=width=height=0);template<typename _Tp> class Rect_ { public: typedef _Tp value_type; //! various constructors Rect_(); Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height); Rect_(const Rect_& r); Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz); Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2); Rect_& operator = ( const Rect_& r ); //! the top-left corner Point_<_Tp> tl() const; //! the bottom-right corner Point_<_Tp> br() const; //! size (width, height) of the rectangle Size_<_Tp> size() const; //! area (width*height) of the rectangle _Tp area() const; //! conversion to another data type template<typename _Tp2> operator Rect_<_Tp2>() const; //! checks whether the rectangle contains the point bool contains(const Point_<_Tp>& pt) const; _Tp x, y, width, height; //< the top-left corner, as well as width and height of the rectangle };
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height),定義一個左上角點座標為(_x, _y)的_width*_height矩形視窗;(這個最常用)
Rect_(const Rect_& r),使用其他的Rect_物件初始化;
Rect_(const Point_<_Tp>& org, const Size_<_Tp>& sz),分別將位置座標(_x, _y)和視窗大小(_width, _height)用Point_和Size_物件初始化;
Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2),分別將座標位置(_x, _y)和視窗大小(_width, _height)用Point_和Point_物件初始化。
//如果建立一個Rect物件rect(100, 50, 50, 100),那麼rect會有以下幾個功能: rect.area(); //返回rect的面積 5000 rect.size(); //返回rect的尺寸 [50 × 100] rect.tl(); //返回rect的左上頂點的座標 [100, 50] rect.br(); //返回rect的右下頂點的座標 [150, 150] rect.width(); //返回rect的寬度 50 rect.height(); //返回rect的高度 100 rect.contains(Point(x, y)); //返回布林變數,判斷rect是否包含Point(x, y)點 //還可以求兩個矩形的交集和並集 rect = rect1 & rect2; rect = rect1 | rect2; //還可以對矩形進行平移和縮放 rect = rect + Point(-100, 100); //平移,也就是左上頂點的x座標-100,y座標+100 rect = rect + Size(-100, 100); //縮放,左上頂點不變,寬度-100,高度+100 //還可以對矩形進行對比,返回布林變數 rect1 == rect2; rect1 != rect2; //OpenCV裡貌似沒有判斷rect1是否在rect2裡面的功能,所以自己寫一個吧 bool isInside(Rect rect1, Rect rect2) { return (rect1 == (rect1&rect2)); } //OpenCV貌似也沒有獲取矩形中心點的功能,還是自己寫一個 Point getCenterPoint(Rect rect) { Point cpt; cpt.x = rect.x + cvRound(rect.width/2.0); cpt.y = rect.y + cvRound(rect.height/2.0); return cpt; } //圍繞矩形中心縮放 Rect rectCenterScale(Rect rect, Size size) { rect = rect + size; Point pt; pt.x = cvRound(size.width/2.0); pt.y = cvRound(size.height/2.0); return (rect-pt); }
二、rectangle函式
void rectangle(InputOutputArray img, Point pt1, Point pt2,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
簡介:使用對角線的兩點pt1,pt2畫一個矩形輪廓或者填充矩形
@param img Image.
@param pt1 Vertex of the rectangle.
@param pt2 Vertex of the rectangle opposite to pt1 .
@param color Rectangle color or brightness (grayscale image).color 線條顏色 (RGB) 或亮度(灰度影象 )
@param thickness Thickness of lines that make up the rectangle. Negative values, like CV_FILLED ,
mean that the function has to draw a filled rectangle.thickness 組成矩形的線條的粗細程度。取負值時(如 CV_FILLED)函式繪製填充了色彩的矩形
@param lineType Type of the line.
//! type of line
enum LineTypes {
FILLED = -1,
LINE_4 = 4, //!< 4-connected line
LINE_8 = 8, //!< 8-connected line
LINE_AA = 16 //!< antialiased line
};
@param shift Number of fractional bits in the point coordinates.座標點的小數點的位數
void rectangle(CV_IN_OUT Mat& img, Rect rec,
const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0);
簡介:使用矩陣類rec畫一個矩形輪廓或者填充矩形
其他引數同上
三、例項示範
rectangle(matImage,Point(20,200),Point(200,300),Scalar(255,0,0),1,1,0);
//Rect(int a,int b,int c,int d)a,b為矩形的左上角座標,c,d為矩形的長和寬
rectangle(matImage,Rect(100,300,20,200),Scalar(0,0,255),1,1,0);
參考連結:
https://blog.csdn.net/yhl_leo/article/details/50593825
https://blog.csdn.net/kh1445291129/article/details/51149849
https://blog.csdn.net/ubunfans/article/details/24421981