[英]Cropping a rotated image in opencv
好的,所以我在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);
老實說,我從來沒有使用過getRectSubPix,所以我不知道到底是什么問題,但是..為什么不花錢呢? 具有cv::Mat
類的C ++ API對此非常方便。
這是一個文檔 ,您可以使用cv::Mat
的重載函數調用運算符獲取ROI(如果您還不了解,則為感興趣的區域)。
無論如何,這是獲取ROI的代碼段
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
屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.