Visual C++ 2010 上で OpenCV2 のプログラムを開発するときの覚え書き

最終更新  2017.10.25


◆◆ opencv のインストール ◆◆

http://www.wakayama-u.ac.jp/~chen/opencv/opencvinst.html

にインストール方法が載っている。

3.3     はよくわからない
2.4.13  は VC 2015 のランタイムが必要
2.4.9   は VC 2010 2012 に対応している。
        ここでは VC++ 2010 を使うので、2.4.9 を使う

opencv は exe をクリックするとフォルダに展開される
インストールの必要はない。

他のパソコンでも動かすことを考えて、ここでは
c:\ols\opencv2.4.9 以下に配置する。


◆◆ Windows における環境設定 ◆◆

システム環境変数 PATH に

   C:\ols\opencv2.4.9\build\x86\vc10\bin

を付け加える。

Windows10 の場合、
スタートを右クリック --- システム --- バージョン情報 --- システム情報 ---
システムの詳細設定 --- 環境変数

ユーザー環境変数に加えると "" がついてしまい、うまく設定できない。


◆◆ Visual C++ 2010 での設定 ◆◆

(1) プログラムの先頭での指定

#include <opencv2/opencv.hpp>
#include <stdio.h>
#include <string.h>
#include <Windows.h>

#include <iostream>
#include <random>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#pragma comment(lib,"opencv_core249d.lib")
#pragma comment(lib,"opencv_imgproc249d.lib")
#pragma comment(lib,"opencv_highgui249d.lib")
#pragma comment(lib,"opencv_video249d.lib")
#pragma comment(lib,"opencv_objdetect249d.lib")
#pragma comment(lib,"opencv_legacy249d.lib")
#pragma comment(lib,"opencv_calib3d249d.lib")
#pragma comment(lib,"opencv_contrib249d.lib")
#pragma comment(lib,"opencv_features2d249d.lib")
#pragma comment(lib,"opencv_flann249d.lib")
#pragma comment(lib,"opencv_ml249d.lib")
#pragma comment(lib,"opencv_gpu249d.lib")

using namespace std;
using namespace cv;

(2) ディレクトリの設定

プロジェクト --- ○○○のプロパティ --- 構成プロパティ --- C/C++ --- 全般
追加のインクルードディレクトリ

C:\ols\opencv2.4.9\build\include

プロジェクト --- ○○○のプロパティ --- 構成プロパティ --- リンカー
追加のライブラリディレクトリ

C:\ols\opencv2.4.9\build\x86\vc10\lib

(3) スタックを 10MB にする

スタックサイズが足らないというエラーが出ることがある。
その場合の回避方法。

プロジェクト --- ○○のプロパティ --- 構成プロパティ --- リンカー --- システム
--- スタックのサイズの設定

10 000 000


(4) 実行時のディレクトリは起動方法によって異なる。

exe ファイルをダブルクリック ----- exe があるディレクトリ
Visual Studio から実行       ----- cpp があるディレクトリ


◆◆ プログラムの新規作成 ◆◆

新規作成 --- CLR コンソールアプリケーション


◆◆ Shift JIS で書かれたプログラムを使用する ◆◆

古いプログラムを使いまわしするとき、unicode でセーブしろという
エラーが出ることがある。Shift JIS を使ったファイルを使うとき、

プロジェクト --- プロパティ --- 構成プロパティ --- 全般 -- 文字セット
「マルチバイト文字セットを使用する」


◆◆ デモプログラム ◆◆

opencv\sources\samples\c++
opencv\sources\samples\python2

などにある。


◆◆ OpenCV2 の基本関数と使い方 ◆◆

> カメラの使い方

cv::VideoCapture cap;
cv::Mat frame,image;

cap.open(0);
if ( !capture.isOpened() ){
   cout << "cannot open camera.\n";
   return 1;
}

cv::namedWindow("win");

cap >> frame;
if ( frame.empty() ){
    cout << "cannot get frame.\n";
    return 1;
}

while(1){
    cap >> frame;
    frame.copyTo(image);
    imshow("win",image);
    key cv::waitKey(1);
    if ( key == 'q' ) break;
}

> 画像を明示的に作る

cv::Mat image(HEIGHT, WIDTH, CV_8UC4);
cv::Mat image(HEIGHT, WIDTH, CV_8UC3);
cv::Mat image(HEIGHT, WIDTH, CV_8UC1);

高さと幅の順序が通常と逆なのに注意

> ピクセル操作

cv:Mat image;

1 つめの方法

UCHAR* data;

index = ( y * width + x ) * 4;
data = &image.data[index];
data[0] = b;
data[1] = g;
data[2] = r;

2 つめの方法

cv::Vec3b p;

p.val[0] = b;
p.val[1] = g;
p.val[2] = r;
image.at<cv::Vec3b>(i,j) = p;

> 円を書く

cv::Point cvpoint;
cvpoint.x = 100;
cvpoint.y = 200;

circle(image, cvpoint, radius, Scalar(0,0,255),-1,8);


◆◆ ライブラリの設定を毎回するのが面倒なとき ◆◆

中村薫氏の本の p.31 にそれらの設定をプロジェクトプロパティファイルに
落とす方法が書いてある。

「ツール」→「設定」→「上級者用の設定」

左側の
「プロパティマネージャ」→「新しいプロパティシートの追加」でセーブ
「プロパティマネージャ」→「既存のプロパティシートの追加」で読み込み?