2016年11月16日水曜日

Re:ゼロから始める開発者生活④

今回はちょっとめんどくさいかもしれませんがあとちょっとなので頑張って行きましょう‼

今回やることは

③「opencv_world310d.dll」を配置したり「opencv_lib.hpp」を作ったりする。


ちょっと説明します。

opencv_lib.hppについて


この方法を試す前にNuGetで導入を試みた方なら分かってもらえると思いますが、NuGetで導入成功と表示されても実際にソースコードを書くとエラーを返されます(注:2016年11月1日現在)。

なぜか?ソースコードでインクルードする「opencv_lib.hpp」が存在しないからです。
これは各ファイルの場所が書いてあるらしいファイルで、前のバージョンでも自作する必要があったみたいです。
試しに2.4.4用のテンプレートを244→310にして突っ込んでみましたがエラーorz
いろいろ探した結果、見つかりました。

「3.1から場所を表すファイルはworldファイルにまとまったからworldファイルの場所を書くだけでいい」

ということらしいです。

opencv_world310d.dllについて


これは正しいやり方では「パスを通す」のが一般的みたいですが管理者権限がないので基本に立ち返り(?)「プロジェクトごとにsourceファイルと同じフォルダにopencv_world310d.dllを突っ込む」という方法でやりましょう。
ちなみに310の後についている「d」は「デバッグ用」を表す「d」ですので、リリース用の環境を作るときは「d」のついていない方に入れ替えてください。


では実際の作業に移ります。

まずVS 2015を起動して好きな場所に空のプロジェクトを作成します。
場所はデフォルトだと「ドキュメント」フォルダになっていると思います。
これは共有フォルダなどに変更しても大丈夫です。ファイルがいじれる場所にしてください。
ちなみにUSBメモリに環境を作ろうとしたら失敗しました。たぶんできる方法があるんだとは思いますが、この方法では無理でした。(絶対パスだからなんでしょうか…。)

最初にでるウィンドウでは空のプロジェクトにチェックを入れて完了を押してください。
「ソースフォルダ」を右クリックして「新しい項目」から「ソースファイル」を作成してください。
これで空のプロジェクトに空のソースファイルが入っている状態になりました。
ここからする作業は下の3つです。

Ⅰ.プロジェクトプロパティを設定する


プロジェクトを右クリック→プロパティ
→C/C++→追加のインクルード ディレクトリ→編集
と選択していくとウィンドウが開きます。
矢印のボタンをクリックしてビルドしたOpenCVのフォルダのbuild→install→includeと開いていってincludeフォルダを指定してください。表示されるパスが ~\includeとなっていますか?

次にライブラリディレクトリを追加します。
プロパティウィンドウの左側の「リンカ」をクリックし、「追加のライブラリディレクトリ」を開いて「編集」をクリックします。
上と同じようなウィンドウが開きます。
矢印のボタンを押してbuild→install→×86→vc14→lib と選択していきます。
パスの最後が上の写真のようになっていることを確認してください。

次に「リンカ」をダブルクリックしてタブを開きます。
その中の「入力」をクリックしてください。
赤の矢印のところを開いて上の二つと同じく編集をクリックしてください。
上の写真のようなウィンドウが出ると思います。
この入力はウィンドウではなくファイルのパスを直接入力します。
上で指定した「lib」フォルダの中の「opencv_world310d.lib」のパスを黄色の矢印のスペースに貼り付けてください。
写真と同じ状態になったことを確認してください(310の後にdが付くので間違えないように)。
すべて終わったらOKを押してウィンドウを閉じてください。VS 2015も閉じても構いません。


Ⅱ.opencv_lib.hppを作成する


メモ帳を開き、下の内容を入力して保存してください。
#if _DEBUG
#pragma comment(lib, "opencv_world310d.lib")
#else
#pragma comment(lib, "opencv_world310.lib")
#endif
ファイル名を「opencv_lib.hpp」に変更して保存します。「拡張子を変更すると~」という警告がでるかもしれませんが無視して変更してください。

こうなります(Windows7での表示です、若干異なるかもしれません)。
opencv→build→install→include→opencv2に移動させてください。


Ⅲ.opencv_world310.dllをコピペする


このファイルはopencvを使ったソフトが動くたびに読み込まれます。
build→install→×86→vc14→binに入っているopencv_world310d.dllをコピーして


ソースファイル(Sourse.cpp)が入っているフォルダに貼り付けてください。

ポイッと。



これで環境構築は終了です。

きちんと動作するかテストします。ソースファイル(Sourse.hpp)と同じフォルダに test.jpg と名前を変更したJPEGファイルを入れてください。これを表示してみます。
サンプルコードをソースファイルに入力してデバッグボタンを押して起動してみましょう。


サンプルコード


#include <opencv2/opencv.hpp>
#include <opencv2/opencv_lib.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <windows.h>

int main(void)
{
char path[] = "test.jpg";
cv::Mat src_img;
cv::namedWindow("Image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
while (1) {
src_img = cv::imread(path, 1);
if (src_img.empty()) return -1;
cv::imshow("Image", src_img);
cv::waitKey(1);
if (GetKeyState(VK_LSHIFT)<0) { return 0;}
}

}

きちんと動作すれば成功です。

これで開発を始める準備が終わりました。

ここからは楽しいですよ~!!
間違っていてもなにが間違っているのかVSが教えてくれますから(笑)
私も環境構築が終わった日は一日中ニコニコしながらコード書きまくってました。

私の顧問いわく、
「環境構築が一人でできるようになって初めて本当の開発者を目指せる(低音)。」
だそうです。

お疲れ様でした。
別シリーズで実際の開発も報告していきます。