一系列點畫框(不規則框)

做個記錄:先求點的凸包,再畫

void draw_hull()
{
    int w = 600;
    int h = 500;
    cv::Mat  polyImg = cv::Mat::zeros(w,h,CV_8UC3);
    std::vector<Point> planevKeys = 
    {
        {159 , 64}, {136 , 74 }, {178 , 34 }, {132 , 89 },{124 , 112}, {178 , 50 },{101 , 115}, {99 , 99 },       
         {204 , 42 },{189 , 38 },{120 , 95 },{113 , 93 },{58 , 130 },{175 , 57 },{160 , 60 },{159 , 64 },
        {172 , 59 }, {178 , 49 },{109 , 111}, {100 , 106}, {183 , 73 }, {200 , 52 },{205 , 41 },{57 , 129 },
        {189 , 38 },{148 , 91 },{119 , 93 }, {102 , 111}, {112 , 93 },{100 , 100}, {54 , 142 },
        {192 , 53 }, {102 , 138}, {102 , 123}, {76 , 131 },{125 , 76 },{138 , 73 },{178 , 48 },{178 , 32 },
        {179 , 48 },{119 , 91 },{101 , 138}, {158 , 64 },{55 , 122 },{190 , 99 },{101 , 102}, {101 , 87 },
        {159 , 62 },{138 , 72 },{203 , 43 },{178 , 48 },{174 , 59 },{136 , 73 },{149 , 79 },{143 , 153}, {191 , 94 },
        {158 , 62 },{98 , 128 },{101 , 104}, {98 , 95 }, {119 , 92 },{194 , 58 }, {114 , 124}, 
        {103 , 194}, {150 , 79 },{136 , 72 },{168 , 113}, {100 , 112}, {118 , 92 },{100 , 99 },{146 , 88} 
        };

     //算凸包
    std::vector<cv::Point> planeHullvKeys;
    printf("SLAM測試:   XXXXXX");
    cv::convexHull(planevKeys,planeHullvKeys,true,true);

    for(int i=0;i<planevKeys.size();i++){
        //printf("SLAM測試xy: %d , %d ",planevKeys[i].x,planevKeys[i].y);
        cv::circle(polyImg,planevKeys[i],8,cv::Scalar(255,0,0),-1);
    }
	printf("SLAM測試:   YYYYYYYY");
//  cv::Point points[0][planeHullvKeys.size()];
//  for (int i = 0; i < planeHullvKeys.size(); i++) {
//
//   points[0][i] = planeHullvKeys[i];
//    }
    // draw Poly bug
      //
      printf("SLAM測試:開始繪製 平面 多邊形 planevKeys.size :%d - planeHullvKeys.size: %d ",planevKeys.size(),planeHullvKeys.size());
    if( planeHullvKeys.size() == 0){
        return ;
    }
//     for(int i=0;i<planeHullvKeys.size()-1;i++){
// //        line(img, p1, p2, Scalar(33, 33, 133), 2);

//         cv::line(polyImg,planeHullvKeys[i],planeHullvKeys[i+1],cv::Scalar(0, 255, 0),2);
//     }
//     cv::line(polyImg,planeHullvKeys[planeHullvKeys.size()-1],planeHullvKeys[0],cv::Scalar(0, 255, 0),2);

	Point rook[1][planeHullvKeys.size()];
    for(int i=0;i<planeHullvKeys.size();i++)
    {
       rook[0][i] = planeHullvKeys[i];
    }
    const Point *ppt[1] = {rook[0]};
    int npt[] = {(int)planeHullvKeys.size()};
    fillPoly(polyImg,ppt,npt,1,Scalar(0,255,255),8);
    
    cv::imshow("facemotion", polyImg);
    cv::waitKey(0);

}

運行下就有效果了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章