OpenCV >> C/C++

convexhull


參考資訊:
1. examples
2. convexhull

prototype

void cv::convexHull(
  InputArray points,
  OutputArray hull,
  bool clockwise = false,
  bool returnPoints = true);

main.cpp

#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
  vector<Point> pt;
  Mat img(250, 250, CV_8UC3); 
  
  pt.push_back(Point(50, 50));
  pt.push_back(Point(70, 220));
  pt.push_back(Point(210, 30));
  pt.push_back(Point(200, 220));
  
  vector<int> hull;
  convexHull(Mat(pt), hull, true);
  img = Scalar::all(0);
  for(int i=0; i<4; i++){
    circle(img, pt[i], 3, Scalar(0, 0, 255), FILLED, LINE_AA);
  }
  
  int hullcount = (int)hull.size();
  Point pt0 = pt[hull[hullcount-1]];
  for(int i=0; i<hullcount; i++){
    Point p = pt[hull[i]];
    line(img, pt0, p, Scalar(0, 255, 0), 1,LINE_AA);
    pt0 = p;
  }
  imshow("hull", img);

  waitKey();
  return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(main)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(main main.cpp)
target_link_libraries(main ${OpenCV_LIBS})

編譯並且執行

$ cmake .
$ make
$ ./main

完成


返回上一頁