2016. 7. 2.
2016. 8.26. Pathの設定方法を一部訂正
2017. 9.25. OpenCV3.3.0をVisual C++ 2017にインストールする方法を末尾に説明、プログラムはそのままで動作確認済み
石立 喬
OpenCV3.1.0とVisual C++ 2015による画像処理と認識(1)
――― OpenCV3.1.0をダウンロードしてVisual Studio Community 2015で使う
-----
OpenCV3.1.0が2015年12月に公開され、Visual Studio 2015で使用できるようになったので、OSもWindows10に改めて、最新の環境でOpenCVを試すことにした。内容的には、「OpenCVとVisual
C++による画像処理と認識」とほぼ同じとし、変更点に重点を置いて解説する。変更のない部分は解説を省略する場合があるので、対応する旧バージョンの資料を参照されたい。
OpenCV3.1.0とは
OpenCVはオープンソースのComputer Vision用ライブラリで、その名の通り、画像処理用と言うよりは画像認識、画像理解用である。バージョン2には、OpenCV2.4.13.0まであり、機能が強化されたバージョン3は、OpenCV3.0が2015年6月に、OpenCV3.1.0が2015年12月に公開されている。
◎バージョン2からバージョン3への主な変更点(ライブラリモジュール)
・ライブラリモジュールがmainとextraに分けられた
・従来あったgnuの代わりに、CUDA関連のモジュールが多数追加された。
・nonfree、contrib、legacy、oclが、opencv_contribにまとめられた。
・extra(拡張)モジュールとして
face ------- Face Recognition
latentsvm --- Latent SVM
reg -------- Image Registration
text ------- Scene Text Detection and Recognituin
など、具体的な応用を目的とした多数のモジュールが追加された
◎バージョン3.0からバージョン3.1.0への主な変更点(ライブラリモジュール)
extraモジュールとして、
dnn -------- Deep Neural Network
fuzzy ------ Fuzzy Mathematics Image Processing
sfm ------- Structure from Motion
などが追加され、latentsvm がなくなった。
OpenCV3.1.0のダウンロード
OpenCVのダウンロードについては、多くのサイトで紹介されているので、詳細は述べない。
1)http://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.1.0/opencv_3.1.0.exeをダウンロードする。
2)保存先は、C:\Program Files とする(デフォルトでは「ダウンロード」)。ただし、権限の都合などでそれ以外でも良いし、後から移し替えることもできる。
3)ダウンロードが終了すると自己解凍のウインドウが開くので、展開先を確認して「Extract」をクリックする。
Pathの設定
これについても、多くの資料で紹介されているので、簡単な記述にとどめる。
1)「コントロールパネル」→「システムとセキュリティ」→「システム」と順次選択する。
2)左欄の「システムの詳細設定」をクリックする。
3)「システムのプロパティ」ウィンドウの「詳細設定」タブで、右下の「環境変数」をクリックする。
4)「環境変数」ウィンドウで、下部の「システム環境変数」をスクロールして変数「Path」を選択してから、「編集」をクリックする。
5)「環境変数名の編集」ウィンドウが開くので、右上の「新規」をクリックして、
C:\Program Files\opencv\build\x64\vc14\bin
を追加し、「OK」をクリックする。「x64」は64ビットを意味し、「x86」の32ビット用がなくなった。「vc14」は、Visual
Studio 2015を意味する。
追加し終わった「環境変数名の編集」ウィンドウを図1に示す。
図1 PATHを設定し終わった「環境変数名の編集」ウィンドウ
Visual Studio Community 2015側の設定
◎Win32コンソールアプリケーションを作成する
1)Visual Studioを立ち上げ、「新しいプロジェクト」をクリックする。
2)「新しいプロジェクト」ウインドウで、
左欄 --- Visual C++
右欄 --- Win32コンソールアプリケーション
名前 --- OpenCVApplication1(一例)
として「OK」をクリックする。
◎プロパティマネージャーを表示させ、そこから各種設定を始める。
Visual Studioのメニューから、「表示」→「その他のウィンドウ」→「プロパティマネージャー」をクリックする。図2は画面の右上方に表示されたプロパティマネージャーを示す。
図2 プロパティマネージャー
1)「Microsoft.Cpp..x64.userプロパティページ」ウィンドウを開く
プロパティマネージャーのプロジェクト名「OpenCVApplication1(一例)」を展開し、「Debug
| x64」→「Microsoft.Cpp.x64.user」と選択してダブルクリックすると、「Microsoft.Cpp.x64.userプロパティページ」ウィンドウが開く。このウィンドウは、「Release
| x64」からも開くことができ、Debug構成とRelease構成に共通に使用できる(どちらか一方で設定しておけばよい)。
2)追加するインクルードファイルの場所を指定する
「Microsoft.Cpp.x64.userプロパティページ」ウィンドウで、左欄で「共通プロパティ」→「C/C++」→「全般」を選択し、右欄で「追加のインクルードディレクトリ」を選択して、右側の「v」→「<編集...>」をクリックして図3に示す「追加のインクルードディレクトリ」ウインドウを開き、下記を入力して「OK」をクリックする。
C:\Program Files\opencv\build\include
この状態を図3に示す。
図3 「追加のインクルードディレクトリ」ウィンドウで、includeファイルの場所を指定する
3)そうすると、図4に示すように設定されるので、「OK」をクリックする。
図4 「OK」をクリックするとインクルードファイルの場所が設定される
4)追加するライブラリの場所を指定する
「Microsoft.Cpp.x64.userプロパティページ」ウィンドウで、
左欄で「共通プロパティ」→「リンカ」→「全般」を選択し、右欄で「追加のライブラリディレクトリ」を選択して、「v」→「<編集...>」をクリックして開いた図5に示すウィンドウで下記を入力して、「OK」をクリックする。
C:\Program Files\opencv\x64\vc14\lib

図5 「追加のライブラリディレクトリ」ウィンドウで、ライブラリの場所を指定する
5)図6に示すように設定されるので、「OK」をクリックする。
図6 「OK」をクリックすると、追加のライブラリの場所が設定される
6)追加するライブラリの名称を指定する
「Microsoft.Cpp.x64.userプロパティページ」ウィンドウで、左欄で「共通プロパティ」→「リンカ」→「入力」を選択し、右欄で「追加の依存ファイル」を選択し、右側の「v」をクリックし、さらに,<編集...>をクリックすると、図7に示す「追加の依存ファイル」ウィンドウが開くので、図のように入力して、「OK」をクリックする(下方の「継承の値:」はそのまま)。
opencv_world310.libはRelease構成用、opencv_world310d.libはDebug構成用である。
図7 使用したいライブラリ名を選択して登録する
7)図8のように設定されるので、「OK」をクリックする。
図8 「OK」をクリックすると使用したいライブラリ名が登録される
初めてのOpenCV3.1.0プログラム
初めてのプログラムは、やはり「Hello World!」からと言うことと、市販のOpenCV本ではOpenCV添付のレナ嬢(lena.jpg)を使うことが多いので、それに従う。
lena.jpgは、
..../opencv/sources/samples/data/lena.jpg
にあり(従来のsamples/cpp/lena.jpgから変わった)、これを
.../Visual Studio 2015/Projects/OpenCVApplication1/OpenCVApplication1/lena.jpg
にコピーしておく。
図9はプログラムの内容で、これを参照しながら、以下に順次説明する。
◎インクルードファイルと名前空間の指定
"stdafx.h"は自動的に設定されたもので、これはそのままにしておく。OpenCV3.1.0のインクルードファイルは、総合的なopencv2/opencv.hppのみで良い。参考までに確認したところによると、下記の個別ファイルで代用できた。
opencv2/highgui/highgui.hpp -------- imread、imshow関数に必要
opencv2/imgproc/imgproc.hpp ------- putText関数用
使用する関数の多くは、名前空間cvに属しているので、これを宣言しておく。
◎画像の読み込み
画像の読み込みには、関数imreadを使う。引数には、画像ファイル名の他に、カラーで読み込む(3チャンネル)かグレイスケール(1チャンネル)で読み込むかなどのフラグがある。ただし、デフォルトではIMREAD_COLOR
= 1 なので、一般にはファイル名のみで良い。使用できるフラグの一部を参考までに以下に示す。「
= 0」などで示した整数値は、代わりに使用できることを意味する。
IMREAD_GRAYSCALE = 0
IMREAD_COLOR = 1 ------ デフォルト
◎画像の上に文字を描く
関数putTextを使用する。引数には、文字を上書きしたい画像ファイル名、描きたい文字列、画像上の位置、文字のフォント(デフォルト設定はない)、サイズ、色、太さ(デフォルトは1)、近傍ピクセルの連結方法がある。最後に、もう一つデフォルトでfalseの引数があり、これをtrueにすると文字が上下逆転するが、一般には使用しない。
画像のフォントには、
FONT_HERSHEY_SIMPLEX = 0
FONT_HERSHEY_PLAIN = 1
などがあり、ピクセルの連結方法には、
LINE_4 = 4 --------- 4近傍連結
LINE_8 = 8 --------- 8近傍連結、デフォルト
LINE_AA = 16 ------- アンチエリアス
などがある。
日本語が使えるフォントが無いのが残念である。
色は、Scalar(b, g, r)で表す。RGBの順序が逆であるので要注意。
◎画像表示用のウィンドウを準備する
関数namedWindowを使用する。引数はウィンドウの名称(同時にウィンドウのタイトル名でもある)とフラグで、フラグには、
WINDOW_NORMAL = 0
WINDOW_AUTOSIZE = 1 ------ デフォルト
などがある。NORMALの場合には、ウィンドウを最大化すると、それに従って画像も拡大されるが、AUTOSIZEの場合には、画像のサイズは変わらない。
◎ウィンドウに画像を表示する
関数imshowを使用する。引数は、表示するウィンドウの名称(namedWindowで付けたもの)と画像名である。
◎キー入力を待って、全てのウィンドウを閉じ、プログラムの実行を終了する。
キー入力待ちには、関数waitKeyを使用する。引数は、キー入力後の待ち時間であるが、一般には0で良い。そして、開いているすべてのウィンドウを、destroyAllWindows()で閉じる。destroyAllWindowsは、無くても良さそうであるが、多数のウィンドウを用いた場合には、役に立つことがある。
図9 作成したプログラム
得られた結果
図10はプログラムの実行結果である。
図10 得られた結果
結論
旧バージョンで行った方法に倣って、OpenCV3.1.0をダウンロードし、Visual
Studioの環境設定を行なった。今回は、Debug構成のみでなく、Release構成でも使えるようにし、それぞれ動作を確認した。
ライブラリが一本化されて、opencv_world310(d).libになり、プログラム上でも、
#include <opencv2/opencv.hpp> のみで済むようになったのは有難い。
ライブラリモジュールがmainとextraに分かれ、extra(拡張)モジュールにface、text、dnn、sfmなどがあって、具体的な応用に対応し易くなった。ただし、これらの拡張モジュールを導入するには、CMakeなどの手を借りる必要がありそうである。
OpenCV3.3.0をVisual C++ 2017にインストールして動作を確認
ダウンロード元であるhttps://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.3.0/からopencv-3.3.0-vc14.exeをダウンロードして解凍し、C:\Program Filesの下に配置する。
従来のファイルと区別するために、C:\Program Files\opencv330\ ---- のようにしておく(opencv→opencv330)。
1)Path設定は、C:\Program Files\opencv330\build\x64\vc14\binを追加する。
2)追加のインクルードディレクトリは、C:\Program Files\opencv330\build\includeとする。
3)追加のライブラリディレクトリは、C:\Program Foles\opencv330\build\x64\vc14\libとする。
4)追加の依存ファイルは、opencv_world330.libとopencv_world330d.libとする。
以上の結果、図9のプログラムそのままで動作を確認した(lena.jpgのコピーは必要)。
「Visual C++の勉強部屋」(目次)へ