c++ - 如何将关键点复制到另一个 vector

标签 c++ qt vector opencv feature-detection

我有这个变量

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

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

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

我使用 vector 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) ?感谢您的回复! =)

最佳答案

// 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 来增长 vector 一个项目一次:

Y[e].push_back(s);

关于c++ - 如何将关键点复制到另一个 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7981212/

相关文章:

c++ - "Could not determine which "制作 "command to run. Check the "制作 "step in the build configuration."Qt 创建者

c++ - 添加到 std::vector 的中间

c++ - 相同的程序可以在 C 中运行,但不能在 C++ 中运行(使用 linux 系统调用)

c++ - Visual Studio 2010 中的 Qt Link 共享库

qt - QML 表格 View : Number formatting

c++ - 分配 vector 时,它们使用堆上的内存还是堆栈上的内存?

c++ - 尝试调用将数据添加到 vector 的函数时出错

c++ - 为什么 OpenGL 函数不使用模板?

c++ - 检索 CAD 对象的网格点

c++ - 堆大小不断增加直到应用程序崩溃 (C++)