好的,所以我在opencv中裁剪旋转的图像时遇到问题。首先,将数据输入minAreaRect的数组的顺序排序是否重要?如果没有,那么我不知道我的代码有什么问题,但是一旦我裁剪旋转的图像,裁剪的图像就只是一个黑色方块。我假设因为我的盒子不知何故错了。无论如何,这是我的代码。编辑:我的方法很好问题是我对于roi的观点是错误的。
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);
答案 0 :(得分:1)
老实说,我从来没有使用过getRectSubPix,所以我不知道到底出了什么问题,但是......为什么不采用roi?具有cv::Mat
类的C ++ API对此非常方便..
这是一个documentation,您可以使用cv::Mat
无论如何,这是一个获取投资回报率的片段
cv::Mat img = …;
cv::Mat subImg = img(cv::Rect(0, 0, 100, 100));
cv::Mat subImg = img(cv::Range(0, 0), cv::Range(100, 100));
您有一个cv::RotatedRect
,因此您可以直接使用RotatedRect::boundingRect
属性。