致命错误: opencv2/opencv_modules.hpp文件或目录不存在#include "opencv2/opencv_modules.hpp"

17

大家好,我正在尝试使用我从源代码构建的opencv-c++ API(版本4.4.0)。它已安装在/usr/local/中。我只是试图使用以下代码加载和显示图像 -

#include <iostream>
#include <opencv4/opencv2/opencv.hpp>
#include <opencv4/opencv2/core.hpp>
#include <opencv4/opencv2/imgcodecs.hpp>
#include <opencv4/opencv2/highgui.hpp>
#include <opencv4/opencv2/core/cuda.hpp>

using namespace cv;

int main()
{
    std::string image_path = "13.jpg";
    cv::Mat img = cv::imreadmulti(image_path, IMREAD_COLOR);
    if(img.empty())
    {
        std::cout<<"COULD NOT READ IMAGE"<<std::endl;
        return 1;
    }
    imshow("Display Window", img);
    return 0;
}

当我进行编译时,它会在编译期间抛出以下错误 -

In file included from /CLionProjects/opencvTest/main.cpp:2:
/usr/local/include/opencv4/opencv2/opencv.hpp:48:10: fatal error: opencv2/opencv_modules.hpp: No such file or directory
 #include "opencv2/opencv_modules.hpp"

我的Cmake如下所示 -

cmake_minimum_required(VERSION 3.15)
project(opencvTest)

set(CMAKE_CXX_STANDARD 17)
include_directories("/usr/local/include/opencv4/opencv2/")
add_executable(opencvTest main.cpp)
target_link_libraries(opencvTest PUBLIC "/usr/local/lib/")

我不知道我在这里做错了什么... 这可能是一个新手问题,但我刚刚开始使用C++中的OpenCV


2
你需要将/usr/local/include/opencv4添加到你的包含目录中,而不是/usr/local/include/opencv4/opencv2 - drescherjm
1
猜测一下,你的路径不正确。尝试这个 include_directories("/usr/local/include/")。你的包含路径和包含指令中都不应该有 opencv4/opencv2。包含指令从包含路径停止的地方开始。 - john
@john 我认为错误实际上是在 opencv4/opencv2/opencv.hpp 中生成的,它无法找到 "opencv_modules",即使它们在同一个目录中。我也尝试了你的建议,但它并没有起作用,不过我认为这实际上不会有什么区别...虽然我可能错了。 - Atharva Dubey
1
非常感谢@drescherjm,它完美地运行了... - Atharva Dubey
5
对我起作用的是: sudo cp -r /usr/local/include/opencv4/opencv2 /usr/include/。 - Owl
1
@Owl 你的建议很有用。我得到了第二个建议,也帮助了我。在 "args:" 中添加以下内容到 tasks.json"-I/usr/local/include/opencv4", - EE_G_RLP
2个回答

17

解决方法是将路径/usr/local/opencv4纳入到include_directories中,这样就可以完美工作了。

然而,我认为最好的方式是使用find_package函数。我更新了我的Cmake如下,它会在构建时自动处理链接问题。

cmake_minimum_required(VERSION 3.15)
project(opencvTest)

set(CMAKE_CXX_STANDARD 17)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(opencvTest main.cpp)
target_link_libraries(opencvTest ${OpenCV_LIBS})

1
这确实是一个更好、更适当的 CMake 解决方案。 - drescherjm
1
谢谢你的回答!这正是我苦苦寻找了几个小时的答案... - Kris Stern
谢谢!在我的情况下,“include_directories(${OpenCV_INCLUDE_DIRS})”确实起作用了! - undefined

1

#包含<opencv2/opencv.hpp>

应该是这样的。

相对地,头文件搜索路径应该是: /usr/local/include/opencv4


4
请在发布答案或问题时使用 StackOverflow 编辑器提供的适当代码格式选项。 - Pawara Siriwardhane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接