【opencv基礎】Rect類的神奇用法


前言

最近看github上源碼發現對兩個cv::Rect使用相與(&)操作,猛地感覺自己蒙啦,Rect類還有這種神奇用法?!翻看opencv官網Rect類,果然如此!

opencv中Rect類

Rect_類有些意思,成員變量x、y、width、height,分別為左上角點的坐標和矩形的寬和高。常用的成員函數有Size()返回值為一個Size,area()返回矩形的面積,contains(Point)用來判斷點是否在矩形內,inside(Rect)函數判斷矩形是否在該矩形內,tl()返回左上角點坐標,br()返回右下角點坐標。

Rect類的使用

  • rect = rect ± point (shifting a rectangle by a certain offset)
  • rect = rect ± size (expanding or shrinking a rectangle by a certain amount)
  • rect += point, rect -= point, rect += size, rect -= size (augmenting operations)
  • rect = rect1 & rect2 (rectangle intersection)
  • rect = rect1 | rect2 (minimum area rectangle containing rect1 and rect2 )
  • rect &= rect1, rect |= rect1 (and the corresponding augmenting operations)
  • rect == rect1, rect != rect1 (rectangle comparison)

兩個矩形的交並

Rect rect = rect1 & rect2;    
Rect rect = rect1 | rect2;  

兩個矩形的平移或者縮放

Rect rectShift = rect + point;  
Rect rectScale = rect + size;  

all usage

//如果創建一個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);
}

 

參考

1.opencv官網Rect類

2.opencv中的Rect類

2.opencv中Rect類用法

3.opencv中Rect類的神奇用法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM