C++ 动态矢量创建

c++ dynamic vector creation

本文关键字:创建 动态 C++      更新时间:2023-10-16

我在opencv,c ++中使用kmeans聚类。我正在尝试为每个找到的集群创建一个新向量,并将结果点添加到其中。

我有:

    vector<cv::Point2f> markerOne;
    vector<cv::Point2f> markerTwo;
    vector<cv::Point2f> markerThree;
    vector<cv::Point2f> markerFour;
Mat labels, centers;
    int  attempts = 50, numberClusters = 4, flags = cv::KMEANS_PP_CENTERS;
    TermCriteria tc;
    kmeans(centroids, cNumber, labels, tc, attempts, flags, centers);
    for (int i = 0; i < labels.rows; i++)
    {
        int idx = labels.at<int>(i);
        Point2f original_point = centroids[i];
        Point2f clustered_center;
        clustered_center.x = centers.at<float>(idx, 0);
        clustered_center.y = centers.at<float>(idx, 1);

我需要从这里开始,根据此循环中返回的 idx 值创建一个向量。我目前有:

if (idx == 0)
            {
                markerOne.push_back(original_point);                
            }
if (idx == 1)
            {
                markerTwo.push_back(original_point);
            }
if (idx == 2)
            {
            markerThree.push_back(original_point);
          }
if (idx == 3)
          {
            markerFour.push_back(original_point);               
          }     

最多可能有 100 个集群,所以我正在寻找一种更动态的方式来做到这一点。

谢谢!

创建一个向量向量结构,并将点推入相应的向量中,如下所示:

std::vector<std::vector<Point2f> >  vector_of_vector(labels.rows);
for (int i = 0; i < labels.rows; i++)
{
    vector_of_vector[i].push_back(original_point);
}