cv::gpu::SURF_gpu使用期间出现问题:未在此范围中声明“KeyPoint”

Issue during cv::gpu::SURF_GPU usage: ‘KeyPoint’ was not declared in this scope

本文关键字:gpu 范围 声明 KeyPoint 问题 使用期 SURF cv      更新时间:2023-10-16

这里尝试使用opencv的类:SURF_GPU。

testSURFGPU.cpp:

#include <opencv2/nonfree/gpu.hpp>
int main(int argc, char* argv[])
{
    cv::gpu::SURF_GPU surf;
    return 0;
}

控制台命令:

g++ test_surf.cpp -o test `pkg-config --cflags --libs opencv`

以下是我编译时的错误消息:

控制台响应:

    /usr/local/include/opencv2/nonfree/gpu.hpp:75:44: error: ‘KeyPoint’ was not declared in this scope
         void uploadKeypoints(const std::vector<KeyPoint>& keypoints, GpuMat& keypointsGPU);
                                                ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:75:52: error: template argument 1 is invalid
         void uploadKeypoints(const std::vector<KeyPoint>& keypoints, GpuMat& keypointsGPU);
                                                        ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:75:52: error: template argument 2 is invalid
    /usr/local/include/opencv2/nonfree/gpu.hpp:77:68: error: ‘KeyPoint’ was not declared in this scope
         void downloadKeypoints(const GpuMat& keypointsGPU, std::vector<KeyPoint>& keypoints);
                                                                        ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:77:76: error: template argument 1 is invalid
         void downloadKeypoints(const GpuMat& keypointsGPU, std::vector<KeyPoint>& keypoints);
                                                                                ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:77:76: error: template argument 2 is invalid
    /usr/local/include/opencv2/nonfree/gpu.hpp:98:72: error: ‘KeyPoint’ was not declared in this scope
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
                                                                            ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:98:80: error: template argument 1 is invalid
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints);
                                                                                    ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:98:80: error: template argument 2 is invalid
    /usr/local/include/opencv2/nonfree/gpu.hpp:99:72: error: ‘KeyPoint’ was not declared in this scope
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors,
                                                                            ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:99:80: error: template argument 1 is invalid
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, GpuMat& descriptors,
                                                                                    ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:99:80: error: template argument 2 is invalid
    /usr/local/include/opencv2/nonfree/gpu.hpp:102:72: error: ‘KeyPoint’ was not declared in this scope
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, std::vector<float>& descriptors,
                                                                            ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:102:80: error: template argument 1 is invalid
         void operator()(const GpuMat& img, const GpuMat& mask, std::vector<KeyPoint>& keypoints, std::vector<float>& descriptors,
                                                                                    ^
    /usr/local/include/opencv2/nonfree/gpu.hpp:102:80: error: template argument 2 is invalid

我做错了什么?OpenCV的文件(gpu.hpp)如何无法识别OpenCV的对象(KeyPoint)?如有任何帮助,我们将不胜感激。

谢谢。

安装程序:Ubuntu 14.04,OpenCV 2.4.11

您缺少cv::KeyPoint定义的include。

尝试添加

#include <opencv2/features2d/features2d.hpp>

到您的演示代码。

所以,我找到了一个解决方案,我需要:

#include <opencv/cv.h>

到我的演示代码。