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;
    }
    

      

  • 相关阅读:
    python encode 理解
    java类中的static代码块作用
    stanford 词性标注中词性的解释
    Stanford3.8.0依存句法分析在java中运行
    nginx和flask安装与配置
    docker使用
    docker安装
    哈工大分词安装及使用linux
    哈工大分词器中自定义词典的使用
    zookeeper集群安装
  • 原文地址:https://www.cnblogs.com/alexYuin/p/9377322.html
Copyright © 2011-2022 走看看