自己一个需求:给4个点,求最小外接矩形,然后提取矩形内的图片。但是最小外接矩形一般都是倾斜的,那么如何把倾斜的矩形转换成水平呢?在网上找了老半天没找到简单的方法,貌似也没有现成的opencv函数(如果说知道麻烦告诉一声。。)。
网上能查到的是一种漫水填充法,但是貌似挺复杂。所以自己稍微鼓捣了一下,凑合能用。
步骤:
- 找到外接矩形之后,这个外接矩形的中心、长宽、旋转角度是知道的。所以把原图以外界矩形的中心为轴心,旋转相应的度数。
- 然后选取ROI区域,提取就行了。具体ROI怎么选的,看代码。
#include "highgui/highgui.hpp"
#include "imgproc/imgproc.hpp"
#include "iostream"
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
Mat imageSource = imread("1.jpg", 0);
imshow("Source Image", imageSource);
vector<Point> contour;
Point p1(800,400), p2(1100,605), p3(902,970), p4(802,780);//随意给了4个点
contour.push_back(p1);
contour.push_back(p2);
contour.push_back(p3);
contour.push_back(p4);
RotatedRect rect = minAreaRect(contour);//外接矩形
Point2f vertices[