【发布时间】:2014-03-25 18:47:33
【问题描述】:
好的,所以我在 opencv 中裁剪旋转图像时遇到问题。首先,点在数组中输入 minAreaRect 的顺序是否重要?如果不是,那么我不知道我的代码有什么问题,但是一旦我裁剪旋转的图像,裁剪的图像就只是一个黑色方块。我假设是因为我的盒子在某种程度上是错误的。无论如何,这是我的代码。编辑:我的方法很好问题是我的投资回报率是错误的。
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);
【问题讨论】:
-
为什么不参加投资回报率?
-
矩形的坐标是多少?你能运行 Point2f pts[4]; rect.points(pts);并打印 pts 以确保它们在您的 Mat 范围内(如果您的原始点云太靠近边界,它们可能是负数)。
-
nkint - roi 不是旋转的矩形。它的边与坐标轴对齐,这并不总是你想要的。