OpenCV中,在一些场景下需要截取旋转ROI区域进行处理,本文主要演示如何截取旋转矩形。代码如下:
#include "opencv2/opencv.hpp"
using namespace cv;
int main()
{
Mat test_image = imread("./Datas/test.jpg");
RotatedRect rRect = RotatedRect(Point2f(500, 600), Size2f(300, 200), 30);
Point2f vertices[4];
rRect.points(vertices);
for (int i = 0; i < 4; i++)
line(test_image, vertices[i], vertices[(i + 1) % 4], Scalar(0, 255, 0), 2);
cv::Mat mask = cv::Mat::zeros(test_image.size(), CV_8UC1);
//绘制旋转矩形的轮廓到掩码图像上
cv::Point points[1][4];
for (int i = 0; i < 4; ++i) {
points[0][i] = vertices[i];
}
const cv::Point* ppt[1] = { points[0] };
int npt[] = { 4 };
cv::fillPoly(mask, ppt, npt, 1, cv::Scalar(255));
//使用掩码图像截取旋转矩形区域
cv::Mat croppedImage;
test_image.copyTo(croppedImage, mask);
imshow("rectangles", croppedImage);
imwrite("./Datas/rectangles.png", croppedImage);
waitKey(0);
return 0;
}
原图上有一个矩形区域,红色框选,如下所示:
截取的ROI区域如下所示:
|