簡體   English   中英

在opencv中裁剪旋轉的圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM