1

我有这个变量

std::vector <cv::KeyPoint> X[e];

以 e 作为处理的文件数,以及类似的“过滤”向量变量

std::vector <cv::KeyPoint< Y[e];

我使用向量 X 作为检测到的特征的容器

int minHessian = 400;
cv::SurfFeatureDetector deteC( minHessian );

deteC.detect(f[z], X[z]);

在哪里

cv::Mat f[e]

是图像的容器,z 只是一个计数器。

然后这个序列开始

int kd = 0;
for(int dk = 0; dk < X[z].size(); dk++)
{
    cv::KeyPoint s = X[z].at(dk);
    qDebug() << fT << "KEYPOINT" << dk << "\nCLASS ID: " << s.class_id << "\nRESPONSE: "
            << s.response << "\nOCTAVE: " << s.octave
            << "\nSIZE: " << s.size << "\nANGLE: " << s.angle
            << "\nX: " << s.pt.x << " Y: " << s.pt.y;

    if(s.octave > 2 && s.response > 5000.00)
    {
            s.class_id = e;
            kd++;
            // I plan to COPY s to Y[e].at(kd)
    }
}

如何将 s 复制到 Y[e].at(kd) ?感谢您的回复!=)

4

1 回答 1

2
// I plan to COPY s to Y[e].at(kd)   

如果你知道,在循环开始之前,大小Y[e]会变成多少,那么你可以把它放在循环之前:

Y[e].resize(size_that_Ye_vector_will_be);

这在循环内:

Y[e].at(kd) = s;

另一方面,如果你不知道Y[e]会变得多大,你应该push_back在循环内部使用来一次增长一个向量:

Y[e].push_back(s);
于 2011-11-02T13:51:58.723 回答