Хорошо, поэтому у меня проблемы с обрезкой моего повернутого изображения в opencv. Прежде всего, имеет значение, какой порядок точек в массиве подан в minAreaRect? Если нет, то я не знаю, что не так с моим кодом, но как только я обрезаю повернутое изображение, обрезанное изображение - это просто черный квадрат. Я полагаю, потому что моя коробка как-то не так. В любом случае, вот мой код. Изменить: мой метод был в порядке, проблема в том, что мои очки для roi неправильны.Обрезка повернутого изображения в opencv
int len = max(ImageAd.cols, ImageAd.rows);
cv::Point2f pt(len/2., len/2.);
cv:: Mat r = cv::getRotationMatrix2D(pt, -angled, 1.0);
cv::warpAffine(ImageAd, ImageAd, r, ImageAd.size(), INTER_CUBIC);
vector<cv::Point> points;
points.push_back(Pt3);
points.push_back(Pt4);
points.push_back(Pt1);
points.push_back(Pt2);
cv::RotatedRect box = cv::minAreaRect(cv::Mat(points));
cv::Size box_size = box.size;
cv::getRectSubPix(ImageAd, box_size, box.center, ImageAd);
cv::imshow("cropped", ImageAd);
Почему бы просто не взять roi? – nkint
Каковы координаты прямоугольника? Можете ли вы запустить Point2f pts [4]; rect.points (PTS); и распечатать pts, чтобы убедиться, что они находятся в пределах вашего Mat (они могут быть отрицательными, если ваше исходное облако точек слишком близко к границе). – Vlad
nkint - roi не является поворотным прямоугольником. Его стороны выровнены с осями координат, которые не всегда то, что вы хотите. – Vlad