面积法判断多边形顺逆时针
int estimateContourType(std::vector<cv::Point2f> &contour) {
int n = contour.size();
float area = 0.0;
if (n < 3) {
return 0;
}
std::vector<int> index;
cv::convexHull(contour, index);
std::sort(index.begin(), index.end());
n = index.size();
for (int i = 0; i < index.size(); i++) {
auto p0 = contour[index[i]];
auto p1 = contour[index[(i + 1) % n]];
area += (0.5 * (p1.y + p0.y) * (p1.x - p0.x));
}
cout << "contour type area=" << area << endl;
if (area < 0.0f) {
cout << "逆时针" << endl;
return -1;
}
cout << "顺时针" << endl;
return 1;
}