カレンダー
| 09 | 2025/10 | 11 |
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
最新記事
(01/30)
(01/18)
(12/16)
(12/12)
(11/25)
(11/25)
(11/24)
(11/24)
(11/22)
(11/17)
最新コメント
[12/25 日没]
[11/15 無色大師]
[11/12 無色大師]
[11/11 無色大師]
[11/08 無色大師]
リンク
新刊カレンダー
ブログ内検索
プロフィール
HN:
Nina.A
性別:
男性
趣味:
麻雀、ラノベ、漫画
自己紹介:
MJ4や天鳳等でよく麻雀やってます。もし会ったらよろしくです。
ブログは単なるメモ帳となる予定。
ブログは単なるメモ帳となる予定。
カウンタ
C/C++勉強中の大学生雑記
[1]
[2]
2025/10/28
06:20:57
2008/11/06
16:55:01
複数の画像(0.png、1.png、…)を読み込み、そのうちの一枚と他の画像の形状を比較するプログラムを練習用に作ってみた。練習用なのでエラーチェックが適当かもです。
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <vector>
#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
int main(int argc, char* argv[])
{
int i;
// 画像の読み込み枚数を指定
std::cout << "Enter the number of image.\n";
std::cin >> i;
const int num(i);
std::vector<IplImage*> img(num);
{
// 画像読み込み
std::stringstream ssm;
std::string fname;
for(i = 0; i < num; ++i){
ssm << "C:\\Users\\UserName\\Desktop\\IMG\\" << i << ".png";
fname = ssm.str();
img[i] = cvLoadImage(fname.c_str(), CV_LOAD_IMAGE_GRAYSCALE);
if( !img[i] ){
std::cerr << "Failed : " << fname << std::endl;
exit(EXIT_FAILURE);
}
std::cout << "Loaded : " << fname << std::endl;
ssm.str("");
}
}
// 比較元とする画像を指定
do{
std::cout << "Enter the image number of origin.\n";
std::cin >> i;
}while( ( i < 0 || num <= i ) && ( puts("The number exceeds the range.") || true ) );
const int origin(i);
// cvMatchShapes関数を利用して形状を比較する
double* result = new double[num];
for(i = 0; i < num; ++i){
result[i] = cvMatchShapes( img[origin], img[i], CV_CONTOURS_MATCH_I1);
}
// 結果を表示
for(i = 0; i < num; ++i){
std::cout << "I(" << i << "," << origin << ") = " << result[i] << std::endl;
}
// ベストマッチを探す
int minIdx = static_cast<int>(0 == origin);
double minResult = result[minIdx];
for( i = 0; i < num; ++i){
if( i == origin ) continue;
if( result[i] < minResult ){
minResult = result[i];
minIdx = i;
}
}
std::cout << "Min : Image No." << minIdx << std::endl;
// ウィンドウを開く
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Best", CV_WINDOW_AUTOSIZE);
// 画像表示
cvShowImage("Original", img[origin]);
cvShowImage("Best", img[minIdx]);
cvWaitKey();
// 破棄
cvDestroyAllWindows();
delete [] result;
for(i = 0; i < num; ++i){
cvReleaseImage( &img[i] );
}
return 0;
}PR
2008/11/05
20:58:23
演習でOpenCVを使うことになったので自宅のパソコンにもインストールする。
参考:OpenCV プログラミングブック(amazonへのリンク)
まずOpenCV本体をダウンロードする。
- OpenCVはSourceForge.net
のOpenCV Library
からダウンロード可能。(1.1pre1ではなく1.0をダウンロードする)
- あとはインストーラの指示に従っていけば完了。
続いて実行ファイルのパスの設定を行う。(以下はVistaの場合)
- スタートメニュー内の『コンピュータ』を右クリック→『プロパティ』を選択
- 左側のメニューから『システムの詳細設定』をクリック
- 『環境変数』ボタンをクリック
- システム環境変数内の変数名Pathを選択し、『編集』ボタンをクリック
- 『;C:\Program Files\OpenCV\bin;』を末尾に追加する
以下はVisualStudioの設定。
- メニューバーから『ツール→オプション』を選択しオプションウィンドウを開く。
- 左側のツリーから『プロジェクトおよびソリューション→VC++ ディレクトリ』を選択
- ディレクトリを表示するプロジェクトにインクルードファイルを選択
- 以下のディレクトリをリストに追加する。
- C:\Program Files\OpenCV\cv\include
- C:\Program Files\OpenCV\cvcore\include
- C:\Program Files\OpenCV\cvaux\include
- C:\Program Files\OpenCV\otherlibs\highgui
上記のVisual Studioの設定はあくまでライブラリのパスの設定のみで、どのライブラリを利用するかは別に(プロジェクトごとに)指定する必要がある。指定方法は以下の通り。
- OpenCVを利用するプロジェクトを開く
- メニューバーから『プロジェクト→<プロジェクト名>のプロパティ』を選択
- 左側のツリーから『構成プロパティ→リンカ→入力』を選択
- 追加の依存ファイルに以下を追加
cvcam.libhighgui.lib cxts.lib cv.lib cxcore.lib ml.lib cvaux.lib cvhaartraining.lib【追記】cvcam.libが無い? よく分からん。
【さらに追記】
プログラムを動かしてみたら動かなかったので、何でかな~と思ってたら1.1pre1をダウンロードしてきてた。一度アンインストール後1.0をインストールしたらちゃんと動くようになった。cvcam.libもちゃんとあった。
文字コードに関する警告が出たがOpenCV@Chihara-Lab.に解決法が書いてあった。要はエディタやら何やらで開いてUnicodeで保存しましょうという話。
2008/11/03
23:48:42
以下はVisualStudio2008の場合。
- GLUT for Win32
から、glut-3.7.6-bin.zipをダウンロードし、展開する。
- glut32.dllをC:\Windows\System32\に移動。
- glut.hをC:\Program Files\Microsoft Visual Studio 9.0\VC\include\GL\に移動(GLディレクトリは新規作成する)。
- glut32.libをC:\Program Files\Microsoft Visual Studio 9.0\VC\lib\に移動
