【问题标题】:use OpenCV with Clion IDE on Windows在 Windows 上使用 OpenCV 和 Clion IDE
【发布时间】:2016-03-14 10:12:43
【问题描述】:

我实际上正在寻找一种方法来使用 OpenCV 和 JetBrains 的 Clion 创建应用程序。

我已经用 Choco 安装了 OpenCV,所以我把所有东西都放在了 C:\opencv

这是我与 Clion 合作的项目

CMakeLists.txt:

cmake_minimum_required(VERSION 3.3)
project(test)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
include_directories("C:\\opencv\\build\\include\\")

FIND_PACKAGE( OpenCV REQUIRED core highgui imgproc)
set(OpenCV_FOUND TRUE)

set(SOURCE_FILES main.cpp)
add_executable(prog ${SOURCE_FILES})

还有main.cpp:

#include <opencv2/opencv.hpp>

int main() {

    cv::Mat img = cv::imread("./test.jpg", -1);
    cv::imshow("Mon image", img);
    cv::waitKey(0);
    return 0;
}

构建的响应是:

undefined reference to `cv::imread(cv::String const&, int)'

所有 OpenCV 函数的未定义错误

你知道为什么它不起作用吗?

【问题讨论】:

  • 你设置好环境变量了吗?你用的是什么编译器?您没有将可执行文件链接到 OpenCV_LIBS
  • 喜欢macos 环境吗?

标签: windows opencv clion


【解决方案1】:

首先,你需要CMake
然后你需要一个你选择的编译器(MinGWVisual Studio,...)。

  1. 下载 OpenCV 源文件。 Link
  2. 解压到C:\opencv(或您选择的文件夹)
  3. 打开CMake 并选择源(2. 的目录)并构建例如C:\opencv\mingw-buildC:\opencv\vs-x64-build。根据您的配置选择一个。
  4. 点击Configure并根据你的编译器选择生成器。 MinGW Makefiles 在 MingGW 的情况下或 Visual Studio ... 如果您使用 Visual Studio 等等...
    (如果您在使用 MinGW 时遇到问题,请确保将 minGW/bin 目录添加到标有“PATH”的环境路径中)
  5. 等待配置完成,编辑您需要的属性(在我的情况下,我不需要测试、文档和 python)。
    再次单击Configure。当一切都是白色时,点击Generate 否则编辑红色字段。
  6. 打开cmd 和目录来构建3的目录。
    如果您选择 Visual Studio,请打开生成的解决方案。
  7. 编译库。如果您选择的编译器是 MSVC,则运行 mingw32-make(或 mingw64-make)或从 Visual Studio 中生成的解决方案构建 BUILD_ALL 项目。
    这需要一段时间。
  8. 完成后,运行mingw32-make install(或mingw64-make install)。如果您选择了 Visual Studio,则需要构建 INSTALL 项目。
    这将创建一个安装文件夹,其中包含构建自己的 OpenCV 应用程序所需的一切。
  9. 到系统PATH添加C:\opencv\mingw-build\install\x86\mingw\bin
    重启你的电脑。
  10. 设置 CLion:

CMakeLists.txt:

project(test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

# Where to find CMake modules and OpenCV
set(OpenCV_DIR "C:\\opencv\\mingw-build\\install")
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/")

find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

add_executable(test_cv main.cpp)

# add libs you need
set(OpenCV_LIBS opencv_core opencv_imgproc opencv_highgui opencv_imgcodecs) 

# linking
target_link_libraries(test_cv ${OpenCV_LIBS})

main.cpp:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

int main(int argc, char** argv)
{
    if(argc != 2)
    {
        std::cout << "Usage: display_image ImageToLoadAndDisplay" << std::endl;
        return -1;
    }

    cv::Mat frame;
    frame = cv::imread(argv[1], IMREAD_COLOR); // Read the file

    if(!frame) // Check for invalid input
    {
        std::cout << "Could not open or find the frame" << std::endl;
        return -1;
    }

    cv::namedWindow("Window", WINDOW_AUTOSIZE); // Create a window for display.
    cv::imshow("Window", frame); // Show our image inside it.

    cv::waitKey(0); // Wait for a keystroke in the window
    return 0;
}

构建并运行main.cpp

所有路径取决于您在 2.3. 中所做的设置。您可以根据需要更改它们。

更新 1:我更新了帖子以使用您选择的编译器。

建议:使用像Conan 这样的包管理器让生活变得更轻松。

【讨论】:

  • 您上面声明,“您需要下载 FindOpenCV.cmake 并将其添加到 project-root/cmake/。”在我的例子中,我需要将 FindOpenCV.cmake 添加到 CLion 的 CMake 安装目录中,在我的例子中是 C:\Program Files (x86)\JetBrains\CLion 2016.2.1\bin\cmake\share\cmake-3.6\Modules。在这个位置,我发现了许多其他 Find*.cmake 文件。
  • 在使用 MinGW 构建 opencv 时,我可以在 CLion 中使用 Cygwin 而不是 MinGW,因为在 CMake-gui 中没有 Cygwin
  • @MichałZiobro 是的,你可以。
  • 为什么我不断收到关于未定义对 cvRound() 函数的引用的错误?我尝试了 opencv 提取包中的预构建库以及来自某些网站的其他 cygiwn 预编译包。我也尝试使用 CMake gui 编译它,但它不断无法编译,并出现一些错误,例如调用某些线程相关函数。让它在 Windows 上运行似乎非常困难;/ 我正在从 macOS 移植应用程序,并且认为让它正常运行并不难。
  • 有人在执行cingw32-make时遇到问题了吗?我完全按照指南完成了所有操作,但它会引发如下错误:opencv\sources\3rdparty\libjpeg-turbo\src\jmemmgr.c: In function 'realize_virt_arrays': \opencv\sources\3rdparty\libjpeg-turbo\src\jmemmgr.c:662:11: error: 'SIZE_MAX' undeclared (first use in this function) if (SIZE_MAX - maximum_space &lt; new_space) ^~~~~~~~ 有什么想法吗?我不是真正的 c++ 开发人员。
【解决方案2】:

我只想在daB0bby的答案中再补充一件事。少数 Min-GW 编译器不支持 C++ 版本 11 或更高版本。 OpenCV 中的线程需要此版本。所以我会建议使用TDM-GCC Compiler 而不是 MinGW 编译器。安装此编译器并将路径 C:\TDM-GCC-64\bin 设置为系统的环境变量。

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多