2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Windows環境でのC++でOpenCVを使う

Last updated at Posted at 2023-10-26

はじめに

前回、Windows10環境下でC++を容易に利用するための記事を書きました。
わけありでOpenCVの導入記事を急がなければならなくなったため、ここにOpenCVの導入記事を記します。
最終目標として、OpenCVとC++を利用して画像をグレースケール画像に変換するというプログラムを構築できるようにする、というものです。
※残念ですが、私の実力不足上、CUDAの有効化等のオプション設定の記載はありません。

前提知識

前記事の内容を網羅しているなら問題ないかと思いますが、Windows環境ではコンパイル、実行ファイル作成にあたっての設定がかなり複雑なため、パスや権限についての簡易的な知識は持っていてほしいです。

使用環境

  • Windows 10 64bit
  • Visual Studio 2022(Community)
  • CMake
  • Visual Studio Code
  • OpenCV ←NEW‼

環境の導入

OpenCVのインストール

OpenCVをインストールします。公式からとりあえず使用するバージョンをインストールします。(ライブラリの互換性等はここでは言及しません)本記事ではOpenCV-4.7.0を利用しました。Windowsなので、Windowsのボタンをポチって、exeファイルをダウンロードします。

opencv-hpsource.png
ダウンロードされたexeファイルを展開します。
opencv-extract.png
ここでファイルをわかりやすいところに指定し、「extraxt」を押してファイルを展開します。ここで、指定するフォルダには日本語が含まれないように気を付けてください。(文字コードの問題上めんどくさい)
例として私はC:\cpp_librares\opencvというところに展開しました。opencvというフォルダにはbuild、opencv、sourcesというフォルダと、3つのtxtファイルが含まれている状態になります。
opencv-directroies.png

環境変数の指定

環境変数を設定します。前回の記事は割と適当に話してしまったので、少し具体的に説明すると

  1. 検索欄から「環境変数」を打って開く
  2. その下にある「環境変数(N)」を選択、さらにその中のPathのところを選択し、編集を押す
  3. 既に環境変数がいくつか設定されているが、新規を押してパスを指定。このパス詳細はユーザー依存
    私はこのような感じで、前回設定したCMakeと、今回設定したOpenCVのパスがあります。binとlibのフォルダが今回で指定するべきパスです。
    opencv-path.png
    一応再起動して、設定を反映させます。

プロジェクトの作成

これでパスが通るようになったため、前回と同じ手法でプロジェクトを作成します。
ディレクトリはこのような感じ
opencv-projectdir.png

original.jpgは読み込むために用意します。

CMakeLists.txt
#バージョン指定(最低限バージョンの保証)
cmake_minimum_required(VERSION 3.1.0)
#プロジェクト名指定
project(cv-test)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
include(CheckCXXCompilerFlag)


set(cpp_code ${CMAKE_CURRENT_SOURCE_DIR}/code/cv-test.cpp)
#コンパイラのバージョン確認と指定
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
elseif(COMPILER_SUPPORTS_CXX0X)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
endif()
#外部ライブラリの参照および、ライブラリファイルのインポート
find_package(OpenCV REQUIRED)

#外部ライブラリ、ソースファイルをリンクし、コンパイルして実行ファイルを生成
add_executable(${PROJECT_NAME} ${cpp_code})
include_directories(${PROJECT_NAME} ${ADDITIONAL_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
set_target_properties (${PROJECT_NAME} PROPERTIES FOLDER Examples)

install(
    TARGETS

    cv-test

    RUNTIME DESTINATION
    ${CMAKE_INSTALL_PREFIX}/bin
)

前回と変わったのは、外部パッケージのインポート設定です。
ここで参照することで、外部ライブラリをインクルードすることができます。
なお、環境変数を設定しておかないと、見つけてくれないので、お気をつけください。

cv-test.cpp
#include <opencv2/opencv.hpp>

using namespace cv;

int main(void){
  //画像の読み込み
  Mat image =imread("C:\\cpp_libraries\\opencv-test\\original.jpg");
  //グレースケール画像の作成
  Mat gray;
  cvtColor(image, gray, COLOR_BGR2GRAY);
  //ファイルの書き込み
  imwrite("C:\\cpp_libraries\\opencv-test\\output.jpg", gray);

  return 0;
  
}

まあここらへんの扱いはご存じかと思われますので、割愛します。cv-test.cppを見てわかる通り、original.jpgを読み込み、この画像をグレースケールに変換したのち、output.jpgとして出力します。

出力結果

Visual Studio Codeのターミナルで前回のようにexeファイルを作成して、実行します。

$ cd .\build\
$ cmake ..
$ cmake --build .
$ cd .\Debug\
$ .\cv-test.exe

これでフォルダ内にoutput.jpgが出力されます。こんな感じに
opencv-dir-after.png
ではoriginal.jpgとoutput.jpgを比較してみましょうか。
original.jpg
output.jpg
はい、遺影になりましたね。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?