web-dev-qa-db-ja.com

ClionでOpenCVを使用するIDE Windowsの場合

JetBrainsのClionを使ってOpenCVでアプリを作成する方法を実際に探しています。

ChocoでOpenCVをインストールしたので、C:\ opencvにすべてのものを持っています

これはクリオンとの私のプロジェクトです

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関数の未定義エラー

それが機能しない理由を知っていますか?

9
miton18

Windowsでこれをどのように実行したかを説明できます。

まず、 MinGWCMake が必要です。

  1. OpenCVソースファイルをダウンロードします。 リンク
  2. C:\opencv(または任意のフォルダ)に解凍します
  3. CMakeを開き、ソース(2。のディレクトリ)を選択して、例を作成しますC:\opencv\mingw-build
  4. Configureをクリックし、MinGW Makefilesを選択します。 (問題が発生した場合は、minGW/binディレクトリが「PATH」というラベルの環境パスに追加されていることを確認してください)
  5. 設定が完了するのを待って、必要に応じてプロパティを編集します(私の場合、テスト、ドキュメント、Pythonは必要ありません)。
    enter image description here もう一度[Configure]をクリックします。すべてが白の場合はGenerateをクリックし、それ以外の場合は赤いフィールドを編集します。
  6. cmdとdirを開いて、3のディレクトリを構築します。
  7. mingw32-make(またはmingw64-make)を実行します。 これにはしばらく時間がかかります。enter image description here
  8. 完了したら、mingw32-make install(またはmingw64-make install)を実行します。
    これにより、独自のOpenCVアプリを構築するために必要なすべてが含まれているインストールフォルダーが作成されます。
  9. システムにPATHを追加C:\opencv\mingw-build\install\x86\mingw\bin
    PCを再起動します。
  10. CLionをセットアップします。
    • FindOpenCV.cmake をダウンロードしてproject-root/cmake/に追加する必要があります。

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。で行った設定に依存します必要に応じて変更できます。

29
daB0bby