概念:在一个多边形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。(最小外接多边形)。
检测算法:Graham扫描法
正式定义:包含集合S中所有点的最小凸多边形称为凸包。
Graham扫描法:
首先选择Y方向最低的点作为起始点p0,从p0开始极坐标扫描,依次添加p1...pn(排序顺序是根据极坐标的角度的大小,逆时针方向)
对每个点pi来说,如果添加pi点到凸包中导致一个左转向(逆时针方法)则添加该点到凸包,反之如果导致一个右转向(顺时针方向)删除该点从凸包中
流程:
首先把图像从RGB转为灰度
然后在转为二值图像
再通过发现轮廓得到候选点
凸包api调用
绘制显示
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int threshold_value = 100;
int threshold_max = 255;
Mat src, dst, gray_src;
const char* output_image = "convex hull demo";
void Threshold_Callback(int, void*);
RNG rng(12345);
int main(int argc, char** argv) {
src = imread("plane.jpg");
if (!src.data) {
printf("could not load image...\n");
return -1;
}
c