zoukankan      html  css  js  c++  java
  • opencv获得轮廓内的所有坐标

    std::vector<std::vector<cv::Point>> fillContour(const std::vector<std::vector<cv::Point>> & _contours)
    {
    	// sort as x descent y descent.
    	std::vector<std::vector<cv::Point>> contours(_contours);
    	for(size_t i = 0; i<contours.size(); ++i)
    	{
    		std::vector<cv::Point> sub(contours[i]);
    		std::sort(sub.begin(), sub.end(), [&](cv::Point & A, cv::Point & B) {
    			if (A.x == B.x)
    				return A.y < B.y;
    			else
    				return A.x < B.x;
    		});
    
    		contours[i] = sub;
    	}
    
    	// restore as pairs with same ys. 
    	std::vector<std::vector<std::pair<cv::Point, cv::Point>>> contours_pair;
    	for (size_t i = 0; i < contours.size(); ++i)
    	{
    		std::vector<std::pair<cv::Point, cv::Point>> pairs;
    
    		for (size_t j = 0; j < contours[i].size(); ++j)
    		{
    			// j==0
    			if (pairs.size() == 0)
    			{
    				pairs.push_back({ contours[i][j],contours[i][j] });
    				continue;
    			}
    
    			// j>0
    			if (contours[i][j].x != pairs[pairs.size() - 1].first.x)
    			{
    				pairs.push_back({ contours[i][j],contours[i][j] });
    				continue;
    			}
    
    			if (contours[i][j].x == pairs[pairs.size() - 1].first.x)
    			{
    				if (contours[i][j].y > pairs[pairs.size() - 1].second.y)
    					pairs[pairs.size() - 1].second = contours[i][j];
    				continue;
    			}
    		}
    
    		contours_pair.push_back(pairs);
    	}
    
    	// fill contour coordinates.
    	std::vector<std::vector< cv::Point>> fill_con;
    	for (auto pair_set : contours_pair)
    	{
    		std::vector<cv::Point> pointSet;
    		for (auto aPair : pair_set)
    		{
    			if (aPair.first == aPair.second)
    			{
    				pointSet.push_back(aPair.first);
    		
    			}
    			else
    			{
    				for (int i = aPair.first.y; i <= aPair.second.y; ++i)
    				{
    					pointSet.push_back(cv::Point(aPair.first.x, i));
    				}
    			}
    
    		}
    		fill_con.push_back(pointSet);
    	}
    
    	return fill_con;
    }
    

      

  • 相关阅读:
    ubuntu--基础环境瞎搞集合
    java _tomcat_mysql 部署
    简单Dp----最长公共子序列,DAG最长路,简单区间DP等
    大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
    ssh 命令
    linux服务器上设置多主机头,设置多web站点
    getline()函数
    SGU[118] Digital Root
    SGU[117] Counting
    SGU[104] Little shop of flowers
  • 原文地址:https://www.cnblogs.com/alexYuin/p/9377322.html
Copyright © 2011-2022 走看看