【问题标题】:Find min/max x,y in each vector<vector<Point>>在每个向量<vector<Point>> 中找到最小/最大 x,y
【发布时间】:2018-01-19 04:54:03
【问题描述】:

我在图像中找到了轮廓,并将它们的坐标存储在矢量>中,如下所示:vector of vector(Point)

我想在每个向量中找到 xmax、xmin、ymax 和 ymin。 Min/Max coordinates 我必须把它写下来,这样我就可以在脚本的其他部分使用这些值。

vector<vector<Point> > contours1; 
vector<Vec4i> hierarchy1; 
findContours(testowy, contours1, hierarchy1, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

int xmax = 0;
int xymax = 0;
int ymax = 0;
int yxmax = 0;


for( int i = 0; i < contours1.size(); i++ ){
        for(int j=0; j < contours1[i].size();j++){

            if(contours1[i][j].x > xmax){
            xmax = contours1[i][j].x;
            xymax = contours1[i][j].y;   

            }                 

            if(contours1[i][j].y > ymax){
            ymax = contours1[i][j].y;
            yxmax = contours1[i][j].x;

            }  
        }
    } 

不幸的是我的代码只能找到所有向量的最大坐标。

【问题讨论】:

  • 看看this(建议的解决方案可能在矩形形状上有问题)
  • 我是否理解正确,您基本上是想找到一个适合所有轮廓的单个边界框?
  • @DanMašek 不,我想找到它们最高级点的轮廓和坐标。
  • @sturkmen 不完全是我想要的,但如果结果证明是有帮助的。谢谢!
  • 如果您有大量元素,我不建议使用vector的vector:与vector相关的开销不可忽略,一般不建议嵌套STL类。您可以改用压缩行存储 (en.wikipedia.org/wiki/Sparse_matrix)。如果点数很少(小于1000),可以忽略我的评论。

标签: c++ opencv image-processing


【解决方案1】:
struct myclass {
    bool operator() (cv::Point pt1, cv::Point pt2) { return (pt1.y < pt2.y); }
} myobject;
sort(pnt.begin(), pnt.end(), myobject);

使用这个简单的代码并将 pnt 替换为您的向量名称,您可以在向量 vecotr[0] 中找到最大/最小值,该值具有混合值,而向量[last] 具有最大值

【讨论】:

    猜你喜欢
    • 2020-02-24
    • 2018-08-08
    • 1970-01-01
    • 2013-02-27
    • 2021-07-28
    • 2021-11-25
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多