最終更新 2024.04.01
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 以下に配置する。
システム環境変数 PATH に C:\ols\opencv2.4.9\build\x86\vc10\bin を付け加える。 Windows10 の場合、 スタートを右クリック --- システム --- バージョン情報 --- システム情報 --- システムの詳細設定 --- 環境変数 ユーザー環境変数に加えると "" がついてしまい、うまく設定できない。
(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 コンソールアプリケーション
古いプログラムを使いまわしするとき、unicode でセーブしろという エラーが出ることがある。Shift JIS を使ったファイルを使うとき、 プロジェクト --- プロパティ --- 構成プロパティ --- 全般 -- 文字セット 「マルチバイト文字セットを使用する」
opencv\sources\samples\c++ opencv\sources\samples\python2 などにある。
> カメラの使い方
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 にそれらの設定をプロジェクトプロパティファイルに 落とす方法が書いてある。 「ツール」→「設定」→「上級者用の設定」 左側の 「プロパティマネージャ」→「新しいプロパティシートの追加」でセーブ 「プロパティマネージャ」→「既存のプロパティシートの追加」で読み込み?