cv::Rect r; //空構造 cv::Rect r1(50,40,100,80); //賦值構造 //參數1和參數2:左上角點坐標;參數3和參數4:寬和高 cv::Rect r2(r1); //拷貝構造 cv::Size s(100,80); cv::Point p(10,8); cv::Rect r3(p,s); int i=r3.area(); //返回面積 cv::Point p1; cv::Point p2; p1=r3.tl(); //返回左上角點坐標 p2=r3.br(); //返回右下角點坐標 cv::Point p3(50,45); bool b; b=r3.contains(p3); //返回布爾變量,判斷r3是否包含p3點 //返回false 表示不包含; 返回true 表示包含 cv::Rect r4=r1 & r3; //交運算 cv::Rect r5=r1 | r3; //並運算 cv::Size s1(10,5); cv::Rect r6=r3+s1; //改變寬高,左上角坐標不變 cv::Rect r7=r3+cv::Point(-100, 100); //平移,寬高不變 b = r3==r6;//返回布爾變量,判斷r3和r6是否完全相等 b= r3 != r6; //返回布爾變量,判斷r3和r6是否 不相等 qDebug()<<r3.x<<";"<<r3.y<<";"<<r3.width<<";"<<r3.height; //成員訪問 qDebug()<<i<<b; qDebug()<<r4.width<<r5.width; qDebug()<<r6.x<<";"<<r6.y<<";"<<r6.width<<";"<<r6.height; qDebug()<<r7.x<<";"<<r7.y<<";"<<r7.width<<";"<<r7.height;
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);
}