OpenCVのポータブル化 (C++)
更新履歴
- 2020/10/15:@kazuki_nagasawa さんからコメント頂いた点を修正
はじめに
- モチベーション:OpenCVを利用するアプリケーション開発において、リポジトリからコードを落としてからビルド環境を揃えるまでの手動操作を可能な限り省きたい
- 単純に手間を減らしたい
- 開発者間での操作ミスによる開発環境不一致を避けたい
- OpenCVのバージョン違う。。など
- 上記目的のために、OpenCVをビルドするために必要なアイテムをリポジトリに含め、そこを参照してビルドするためのプロジェクト設定を行います。
環境
- OS: Windows10
- 言語:C++
- IDE: VisualStudio2019(16.04)
- インストール方法説明は省略、C++開発環境は必要
- OpenCV
OpenCVの入手
- 下記githubよりダウンロードする
-
https://github.com/opencv/opencv/releases
- opencv-4.2.0-vc14_vc15.exe
- exeを実行して展開(インストール)しておく
VSのプロジェクトを作成
- 「新しいプロジェクトの作成」→「コンソールアプリ」
- ダウンロードしてきた下記のOpenCVファイルを全て、作成したプロジェクトの配下にコピーします。
- opencv/include配下の全ファイル
- opencv/x64/vc15/bin/opencv_world420.dll
- opencv/x64/vc15/lib/opencv_wrold420.lib
- 例として、プロジェクト名をOpenCvSampleConsoleとすると下記のフォルダ・ファイル構成になります。
- ※opencv/include配下の構成は省略
│ OpenCvSampleConsole.sln
│
└─OpenCvSampleConsole
│ OpenCvSampleConsole.cpp
│ OpenCvSampleConsole.vcxproj
│ OpenCvSampleConsole.vcxproj.filters
│ OpenCvSampleConsole.vcxproj.user
│
└─opencv
├─bin
│ opencv_world420.dll
│ opencv_world420d.dll
│
├─include
│ └─opencv2
│
└─lib
opencv_world420.lib
opencv_world420d.lib
-
プロジェクトにincludeパスを通す
-
プロジェクトにライブラリパスを通す
-
libファイルを追加する
- プロジェクトのプロパティ → 構成プロパティ → リンカー → 入力 → 「追加の依存ファイル」に追加
- Debugの場合:opencv_world420d.lib
- Releaseの場合:opencv_world420.lib
- プラットフォームは、念のため「すべてのプロットフォーム」に対して設定すること
-
ビルド後にdllコピーをコピーする
- プロジェクトのプロパティ → 構成プロパティ → ビルドイベント → ビルド後のイベント → 「コマンドライン」に追加
- Debugの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420d.dll" "$(TargetDir)"
- Releaseの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420.dll" "$(TargetDir)"
`
- 「プラットフォーム」は、念のため「すべてのプロットフォーム」に対して設定すること
- [@kazuki_nagasawa さんからの情報]
$(ProjectDir)
と$(TargetDir)
にスペースが含まれていても大丈夫なようにダブルクオーテーションで囲んで置くことが重要
-
HelloWorldを実行
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat outImage = cv::Mat::zeros(150, 300, CV_8UC3);
cv::putText(outImage, "Hello World!!!", cv::Point(10, 70), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255));
cv::imshow("example", outImage);
cv::waitKey(0);
}
- モチベーション:OpenCVを利用するアプリケーション開発において、リポジトリからコードを落としてからビルド環境を揃えるまでの手動操作を可能な限り省きたい
- 単純に手間を減らしたい
- 開発者間での操作ミスによる開発環境不一致を避けたい
- OpenCVのバージョン違う。。など
- 上記目的のために、OpenCVをビルドするために必要なアイテムをリポジトリに含め、そこを参照してビルドするためのプロジェクト設定を行います。
環境
- OS: Windows10
- 言語:C++
- IDE: VisualStudio2019(16.04)
- インストール方法説明は省略、C++開発環境は必要
- OpenCV
OpenCVの入手
- 下記githubよりダウンロードする
-
https://github.com/opencv/opencv/releases
- opencv-4.2.0-vc14_vc15.exe
- exeを実行して展開(インストール)しておく
VSのプロジェクトを作成
- 「新しいプロジェクトの作成」→「コンソールアプリ」
- ダウンロードしてきた下記のOpenCVファイルを全て、作成したプロジェクトの配下にコピーします。
- opencv/include配下の全ファイル
- opencv/x64/vc15/bin/opencv_world420.dll
- opencv/x64/vc15/lib/opencv_wrold420.lib
- 例として、プロジェクト名をOpenCvSampleConsoleとすると下記のフォルダ・ファイル構成になります。
- ※opencv/include配下の構成は省略
│ OpenCvSampleConsole.sln
│
└─OpenCvSampleConsole
│ OpenCvSampleConsole.cpp
│ OpenCvSampleConsole.vcxproj
│ OpenCvSampleConsole.vcxproj.filters
│ OpenCvSampleConsole.vcxproj.user
│
└─opencv
├─bin
│ opencv_world420.dll
│ opencv_world420d.dll
│
├─include
│ └─opencv2
│
└─lib
opencv_world420.lib
opencv_world420d.lib
-
プロジェクトにincludeパスを通す
-
プロジェクトにライブラリパスを通す
-
libファイルを追加する
- プロジェクトのプロパティ → 構成プロパティ → リンカー → 入力 → 「追加の依存ファイル」に追加
- Debugの場合:opencv_world420d.lib
- Releaseの場合:opencv_world420.lib
- プラットフォームは、念のため「すべてのプロットフォーム」に対して設定すること
-
ビルド後にdllコピーをコピーする
- プロジェクトのプロパティ → 構成プロパティ → ビルドイベント → ビルド後のイベント → 「コマンドライン」に追加
- Debugの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420d.dll" "$(TargetDir)"
- Releaseの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420.dll" "$(TargetDir)"
`
- 「プラットフォーム」は、念のため「すべてのプロットフォーム」に対して設定すること
- [@kazuki_nagasawa さんからの情報]
$(ProjectDir)
と$(TargetDir)
にスペースが含まれていても大丈夫なようにダブルクオーテーションで囲んで置くことが重要
-
HelloWorldを実行
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat outImage = cv::Mat::zeros(150, 300, CV_8UC3);
cv::putText(outImage, "Hello World!!!", cv::Point(10, 70), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255));
cv::imshow("example", outImage);
cv::waitKey(0);
}
- インストール方法説明は省略、C++開発環境は必要
- 下記githubよりダウンロードする
-
https://github.com/opencv/opencv/releases
- opencv-4.2.0-vc14_vc15.exe
-
https://github.com/opencv/opencv/releases
- exeを実行して展開(インストール)しておく
VSのプロジェクトを作成
- 「新しいプロジェクトの作成」→「コンソールアプリ」
- ダウンロードしてきた下記のOpenCVファイルを全て、作成したプロジェクトの配下にコピーします。
- opencv/include配下の全ファイル
- opencv/x64/vc15/bin/opencv_world420.dll
- opencv/x64/vc15/lib/opencv_wrold420.lib
- 例として、プロジェクト名をOpenCvSampleConsoleとすると下記のフォルダ・ファイル構成になります。
- ※opencv/include配下の構成は省略
│ OpenCvSampleConsole.sln
│
└─OpenCvSampleConsole
│ OpenCvSampleConsole.cpp
│ OpenCvSampleConsole.vcxproj
│ OpenCvSampleConsole.vcxproj.filters
│ OpenCvSampleConsole.vcxproj.user
│
└─opencv
├─bin
│ opencv_world420.dll
│ opencv_world420d.dll
│
├─include
│ └─opencv2
│
└─lib
opencv_world420.lib
opencv_world420d.lib
-
プロジェクトにincludeパスを通す
-
プロジェクトにライブラリパスを通す
-
libファイルを追加する
- プロジェクトのプロパティ → 構成プロパティ → リンカー → 入力 → 「追加の依存ファイル」に追加
- Debugの場合:opencv_world420d.lib
- Releaseの場合:opencv_world420.lib
- プラットフォームは、念のため「すべてのプロットフォーム」に対して設定すること
-
ビルド後にdllコピーをコピーする
- プロジェクトのプロパティ → 構成プロパティ → ビルドイベント → ビルド後のイベント → 「コマンドライン」に追加
- Debugの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420d.dll" "$(TargetDir)"
- Releaseの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420.dll" "$(TargetDir)"
`
- 「プラットフォーム」は、念のため「すべてのプロットフォーム」に対して設定すること
- [@kazuki_nagasawa さんからの情報]
$(ProjectDir)
と$(TargetDir)
にスペースが含まれていても大丈夫なようにダブルクオーテーションで囲んで置くことが重要
-
HelloWorldを実行
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat outImage = cv::Mat::zeros(150, 300, CV_8UC3);
cv::putText(outImage, "Hello World!!!", cv::Point(10, 70), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255));
cv::imshow("example", outImage);
cv::waitKey(0);
}
- opencv/include配下の全ファイル
- opencv/x64/vc15/bin/opencv_world420.dll
- opencv/x64/vc15/lib/opencv_wrold420.lib
- ※opencv/include配下の構成は省略
│ OpenCvSampleConsole.sln
│
└─OpenCvSampleConsole
│ OpenCvSampleConsole.cpp
│ OpenCvSampleConsole.vcxproj
│ OpenCvSampleConsole.vcxproj.filters
│ OpenCvSampleConsole.vcxproj.user
│
└─opencv
├─bin
│ opencv_world420.dll
│ opencv_world420d.dll
│
├─include
│ └─opencv2
│
└─lib
opencv_world420.lib
opencv_world420d.lib
プロジェクトにincludeパスを通す
プロジェクトにライブラリパスを通す
libファイルを追加する
- プロジェクトのプロパティ → 構成プロパティ → リンカー → 入力 → 「追加の依存ファイル」に追加
- Debugの場合:opencv_world420d.lib
- Releaseの場合:opencv_world420.lib
- プラットフォームは、念のため「すべてのプロットフォーム」に対して設定すること
ビルド後にdllコピーをコピーする
- プロジェクトのプロパティ → 構成プロパティ → ビルドイベント → ビルド後のイベント → 「コマンドライン」に追加
- Debugの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420d.dll" "$(TargetDir)"
- Releaseの場合:
copy "$(ProjectDir)opencv\bin\opencv_world420.dll" "$(TargetDir)"
` - 「プラットフォーム」は、念のため「すべてのプロットフォーム」に対して設定すること
- [@kazuki_nagasawa さんからの情報]
$(ProjectDir)
と$(TargetDir)
にスペースが含まれていても大丈夫なようにダブルクオーテーションで囲んで置くことが重要
- Debugの場合:
HelloWorldを実行
#include "opencv2/opencv.hpp"
int main()
{
cv::Mat outImage = cv::Mat::zeros(150, 300, CV_8UC3);
cv::putText(outImage, "Hello World!!!", cv::Point(10, 70), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(255, 255, 255));
cv::imshow("example", outImage);
cv::waitKey(0);
}
Author And Source
この問題について(OpenCVのポータブル化 (C++)), 我々は、より多くの情報をここで見つけました https://qiita.com/imasaaki/items/5392430b24f49d0bff1b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .