如何将关键点复制到另一个向量

时间:2011-11-02 13:34:19

标签: c++ qt vector opencv feature-detection

我有这个变量

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)?谢谢你的回复! =)

1 个答案:

答案 0 :(得分: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);