• Opencv Convex Hull (凸包)


    #include <iostream>
    #include <opencv2/opencv.hpp>

    using namespace std;
    using namespace cv;

    Mat img1, img2, img3, img4, img_result, img_gray1, img_gray2, img_gray3, img_canny1;

    char win1[] = "window1";
    char win2[] = "window2";
    char win3[] = "window3";
    char win4[] = "window4";
    char win5[] = "window5";

    int thread_value = 100;
    int max_value = 255;
    RNG rng1(12345);

    int Demo_Convex_Hull();
    void Demo_1(int, void*);

    //发现凸包
    int Demo_Convex_Hull()
    {
      namedWindow(win1, CV_WINDOW_AUTOSIZE);
      namedWindow(win2, CV_WINDOW_AUTOSIZE);
      //namedWindow(win3, CV_WINDOW_AUTOSIZE);

      img1 = imread("D://images//1//temp2.jpg");
      //img2 = imread("D://images//1//p5_1.jpg");
      if (img1.empty())
      {
        cout << "could not load image..." << endl;
        return 0;
      }

      imshow(win1, img1);
      img4 = Mat::zeros(img1.size(),CV_8UC3);

      //转灰度图
      cvtColor(img1, img_gray1, CV_BGR2GRAY);
      //模糊处理
      blur(img_gray1, img2, Size(3, 3), Point(-1, -1),BORDER_DEFAULT);

      createTrackbar("track", win1, &thread_value, max_value, Demo_1);
      Demo_1(0,0);

      return 0;
    }

    void Demo_1(int,void*)
    {
      vector<vector<Point>> vec_p;
      vector<Vec4i> vec_4i;

      threshold(img2, img3, thread_value, max_value, THRESH_BINARY);
      findContours(img3, vec_p, vec_4i, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

      vector<vector<Point>> convexs(vec_p.size());
      for (size_t i=0;i<vec_p.size();i++)
      {
        convexHull(vec_p[i], convexs[i], false, true);
      }

      for (size_t j=0;j<vec_p.size();j++)
      {
        Scalar color_1 = Scalar(rng1.uniform(0,255), rng1.uniform(0, 255), rng1.uniform(0, 255));
        drawContours(img4, vec_p, j, color_1, 2, LINE_8, vec_4i, 0, Point(0, 0));
        drawContours(img4, convexs, j, color_1, 2, LINE_8, vec_4i, 0, Point(0, 0));
      }
      imshow(win2,img4);
    }

    int main()
    {
      Demo_Convex_Hull();

      waitKey(0);
      return 0;
    }

     

  • 相关阅读:
    跟小静学CLR via C#(12)委托Delegate
    跟小静读CLR via C#(02)基元类型、引用类型、值类型
    跟小静读CLR via C#(07)静态类,分部类
    jQuery折叠菜单
    ajax调用后台Datatable
    跟小静读CLR via C#(11)无参属性、索引器
    跟小静读CLR via C#(08)操作符
    跟小静读CLR via C#(05) 访问限定、数据成员
    AjaxPro排错指南
    跟小静读CLR via C#(14)可空值类型,关于?和??的故事
  • 原文地址:https://www.cnblogs.com/herd/p/9737457.html
Copyright © 2020-2023  润新知