#include <iostream>
#include<vector>
#include <opencv2/opencv.hpp>
cv::Point2f center;
bool Cmp(cv::Point2f a, cv::Point2f b)
{
if (a.x >= 0 && b.x < 0)
return true;
if (a.x == 0 && b.x == 0)
return a.y > b.y;
int det = (a.x - center.x) * (b.y - center.y) - (b.x - center.x) * (a.y - center.y);
if (det < 0)
return true;
if (det > 0)
return false;
int d1 = (a.x - center.x) * (a.x - center.x) + (a.y - center.y) * (a.y - center.y);
int d2 = (b.x - center.x) * (b.x - center.y) + (b.y - center.y) * (b.y - center.y);
return d1 > d2;
}
int main(){
cv::RotatedRect r1 = cv::RotatedRect(cv::Point2f(30, 40), cv::Size2f(20, 30), 0);
cv::RotatedRect r2 = cv::RotatedRect(cv::Point2f(30, 40), cv::Size2f(20, 30), 0);
std::vector<cv::Point2f> vertices;
int intersectionType = cv::rotatedRectangleIntersection(r1, r2, vertices);
std::cout << intersectionType << std::endl;
int cnt = vertices.size();
center.x = 0;
center.y = 0;
for(int i=0; i<cnt; i++){
center.x += vertices[i].x;
center.y += vertices[i].y;
}
center.x = center.x / cnt;
center.y = center.y / cnt;
std::sort(vertices.begin(), vertices.end(), Cmp);
double area = cv::contourArea(vertices);
return 0;
}
参考
https://www.cnblogs.com/dwdxdy/p/3230156.html