我寫了下面的代碼:它是一個opencv RotatedRect的bug嗎?
#include<iostream>
#include<opencv2/core/core.hpp>
using namespace std;
using namespace cv;
int main()
{
Point2f p[4];
RotatedRect rr(Point2f(),Size2f(1,2),0);
rr.points(p);
for(int i = 0;i < 4;i++) cout<<p[i]<<endl;
Rect r = rr.boundingRect();
cout<< r.x << " " << r.y << " " << r.br().x << " " << r.br().y <<endl;
return 0;
}
RotatedRect RR的左上角爲(-0.5,-1),RotatedRect RR的右下角爲(0.5,1)。所以包含旋轉矩形的最小右上矩形是[(-1,-1),(1,1)],( - 1,-1)是左上角,(1,1)是右下角但是結果矩形的右下角是(2,2)。
和我讀到來源:
Rect RotatedRect::boundingRect() const
{
Point2f pt[4];
points(pt);
Rect r(cvFloor(std::min(std::min(std::min(pt[0].x, pt[1].x), pt[2].x), pt[3].x)),
cvFloor(std::min(std::min(std::min(pt[0].y, pt[1].y), pt[2].y), pt[3].y)),
cvCeil(std::max(std::max(std::max(pt[0].x, pt[1].x), pt[2].x), pt[3].x)),
cvCeil(std::max(std::max(std::max(pt[0].y, pt[1].y), pt[2].y), pt[3].y)));
r.width -= r.x - 1;
r.height -= r.y - 1;
return r;
}
我不知道該代碼r.width -= r.x - 1;
和r.height -= r.y - 1;
我認爲這應該是r.width -= r.x;
和r.height -= r.y;
誰能告訴我它是源錯了嗎?
所以RotatedRect本身就沒問題?如果您將RotatedRect角點推回到std :: vector並計算這些點的通用'cv :: boundingRect',該怎麼辦?那是什麼結果? – Micka
cv :: boundingRect是可以的。 RotatedRect :: boundingRect()可能是錯誤的。 – Gauss