Я написал следующий код:Является ли это ошибкой opencv RotatedRect?
#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 ЗР (-0,5, -1), а нижний правый угол RotatedRect ЗР (0.5,1) .so минимальный правый прямоугольник с поворотным прямоугольником равен [(-1, -1), (1,1)], (-1, -1) - верхний левый угол, (1,1) - нижний правый corner. Но нижний правый угол прямоугольника rect (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 на std :: vector и вычислите общее значение 'cv :: boundingRect' этих точек? Каков результат? – Micka
cv :: boundingRect в порядке. RotatedRect :: boundingRect() может быть неправильным. – Gauss