トップページ⇒tech
982コメント282KB

【Intel】OpenCV総合スレ【画像処理】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/06/26(火) 12:57:41
OpenCVとはインテルが開発・公開しているオープンソースのコンピュータビジョン向けのLinux/Windows向けC/C++ライブラリです。

実装分野は
・ユーザーインターフェイス
・物体分離
・セグメンテーションと認識
・顔認識システム
・ジェスチャー認識
・モーショントラッキング
・感情モーション
・モーション理解
・モーションからの構築(SFM)
・モバイルロボティクス


関連リンクなどは
>2-10くらい
0232デフォルトの名無しさん2008/01/10(木) 22:12:50
>>227
どこが難しいのかよくわからない(´・ω・`)
詳しく!

ヒキスウつけて実行しないとプログラムが動かないって事ですか?
0233デフォルトの名無しさん2008/01/10(木) 22:32:51
が、画像処理以前にCをおべんきょ・・・いやなんでもない
02342302008/01/10(木) 22:38:46
>>231

返信ありがとうございます。
別のライブラリって何がありますかね。。。

っというのは環境が環境なだけに(FC5+usb camera)
なかなか動いてくれるアプリ+カメラがなくて・・・

>>私はそれをやるのにDirectShOwフィルタを作ってもらった

linuxなんですけど、なんかいい案ないですかね(´・ω・`)
0235デフォルトの名無しさん2008/01/10(木) 22:44:38
/dev/usbcam を垂れ流す cgi でも作れば、HTTP サーバが適切に chunked で
垂れ流してくれるんじゃないの?
0236デフォルトの名無しさん2008/01/10(木) 22:58:17
>>210
>>227
引数に画像のファイル名がない or 画像読み込み失敗で return -1
読み込んだ画像をグレースケール変換
これでおk?
0237デフォルトの名無しさん2008/01/10(木) 23:15:15
変換じゃなくて、読み込んだ画像と同じサイズの画像を作成だった
0238デフォルトの名無しさん2008/01/11(金) 00:27:55
>>231ですが、
>>235さんの方法に同意。
別ライブラリとはいっても見つからないとおもわれる。
だからVideoForLinuxで自作する他ないのかもしれませんね
検討を祈る
0239デフォルトの名無しさん2008/01/11(金) 03:36:33
OpenCVには、画像の任意率の拡大縮小とか
指定ピクセルだけ平行移動する関数ってありますか?
並進移動ってのはあったんだけどなんか違う気が・・・
0240デフォルトの名無しさん2008/01/11(金) 05:22:33
239だけど・・・
両方アフィン行列変換でどうにかなるみたいですね…
お騒がせしました・・・
02412132008/01/11(金) 13:25:02
>>214
亀レスだが、サンクス。
0242デフォルトの名無しさん2008/01/11(金) 15:44:15
for文の中で処理を繰り返して、繰り返すたびに処理画像をbmp保存したり
バッファとしてキャプチャしておく方法ってある?
当たり前だけどcvShowImageとかcvSaveImageをfor文の中に入れたら上書きされちゃうんだ・・・
0243デフォルトの名無しさん2008/01/11(金) 16:00:48
別のメモリにコピーしておいて
あとで保存すればいいんじゃ?
0244名無し募集中。。。2008/01/11(金) 17:10:20
cvSaveImageのファイル名を変えないとfor文じゃなくても上書きされるな
0245デフォルトの名無しさん2008/01/11(金) 20:52:39
なんか急にレベル下がったね。
どっかの学校で課題でも出されたのか?
0246デフォルトの名無しさん2008/01/11(金) 21:03:26
レベルの高い話なんてしてたっけ?
0247デフォルトの名無しさん2008/01/11(金) 21:21:04
学生がウラヤマ(´・ω・`)
0248デフォルトの名無しさん2008/01/12(土) 00:26:19
OpenCVの使い方ではなくCについて聞くような
レベルまでは低くは無かったんじゃないかな
0249デフォルトの名無しさん2008/01/12(土) 20:50:31
ここはプログラミング初心者スレじゃないよ
02502302008/01/14(月) 07:38:21
>>235
>>238

亀レスですがありがとうございました。
ですよねぇ、やっぱそうですよねぇ・・・

卒論で使いたかったのですが、
自作してる時間がなさそうなので方向転換します;
0251デフォルトの名無しさん2008/01/15(火) 11:42:21
初心者でも高度なプログラムが書けるっつうのがOpenCVの理念だろ。

上級者ぶってるヤツも文句言わず教えろよクズどもw
0252デフォルトの名無しさん2008/01/15(火) 12:00:28
OpenCVの前にCを勉強しろよ
初心者上級者以前にスレ違い
0253デフォルトの名無しさん2008/01/15(火) 18:04:56
うむ
252が正論だな
Cの質問かOpenCVの質問かきりわけるのが礼儀だな。
0254デフォルトの名無しさん2008/01/18(金) 11:28:02
CamShift, CamshiftTrackerの使い方がいまいちよくわからないのですが、いいサンプルコードとかないですか?
0255デフォルトの名無しさん2008/01/18(金) 18:50:53
本買えばいいんじゃね?
0256デフォルトの名無しさん2008/01/18(金) 21:17:25
質問です。
ライブラリの中の、get_関数が用意されていない変数の値をとってくるには、
どうし書いたらいいでしょうか。
具体的には、mlem.cppのなかのinv_eigen_valuesとcov_rotate_matsの値が欲しいのですが。。
0257デフォルトの名無しさん2008/01/18(金) 21:32:47
デバッガ使えないの?
0258デフォルトの名無しさん2008/01/18(金) 22:04:26
>>257様
>>256です。
少し調べたのですがデバッガの扱いがわかりません。。しかし、知りたい変数は行列なので、見れるか微妙な気がします。もうすこしだけ、ヒントいただけないでしょうか。
0259デフォルトの名無しさん2008/01/18(金) 23:56:01
>>256
自分で望みの関数を追加してみたら?
0260デフォルトの名無しさん2008/01/19(土) 04:10:34
>>259様
256です。
それはそうなんですが、関数、というかアルゴリズムがかなり大変なので、ライブラリから取ってこれればそれに越したことはないのです。
実行時間もライブラリのほうが自分で書いたものより早いですし。
0261デフォルトの名無しさん2008/01/19(土) 04:13:11
ヘッダに無かったら自分で作るしかないだろ
0262デフォルトの名無しさん2008/01/19(土) 04:18:56
ライブラリのソースがあるんだからget_だけ実装すればいいんじゃね
0263デフォルトの名無しさん2008/01/19(土) 11:36:40
画像の輝度を1ピクセルごとに取得して配列に格納できるような関数ってありますか?
例えば100×100サイズの画像なら、x[0][0]に座標0,0の輝度が入って、x[99][99]に座標100,100の輝度が入っていくようなものです。
0264デフォルトの名無しさん2008/01/19(土) 11:43:40
>>260
>>259はライブラリのソースに加えりゃいいだろという話
0265デフォルトの名無しさん2008/01/19(土) 11:43:53
>x[0][0]に座標0,0の輝度が入って、x[99][99]に座標100,100の輝度が入っていく
どうやっても無理じゃね、普通
0266デフォルトの名無しさん2008/01/19(土) 13:50:13
>>263
img->imgDataから自分で2次元配列作れ
0267デフォルトの名無しさん2008/01/19(土) 13:50:52
×imgData
○imageData
0268デフォルトの名無しさん2008/01/19(土) 15:13:45
>>265のつっこみにみんな気付いてあげて
02692562008/01/19(土) 15:24:29
>>261,>>262,>>264様
その通りだと思います。。しかしその書き方がわからないのです。
mlem.cppとml.hの中身をちょこちょこ変えたのですが、(具体的には以下を書き加えたり)どうにもうまくいかないので、ヒントが欲しいのです。そもそもOpenCV以前にプログラミングの知識が心もとないのが問題ではあるんですが。。
const CvMat** CvEM::get_cov_rotate_mats() const
{
return (const CvMat**)cov_rotate_mats;
}
0270デフォルトの名無しさん2008/01/19(土) 15:37:36
>>269
うまくいかないじゃわからないよ。
何を期待して、現状どうなのかを書かないと。
0271デフォルトの名無しさん2008/01/19(土) 16:38:16
機械学習は使ったこと無い上にC++すら知らないけれど、
俺だったら、
CV_CALL( inv_eigen_values = cvCreateMat( nclusters,
params.cov_mat_type == COV_MAT_SPHERICAL ? 1 : dims, CV_64FC1 ));
って書いてあるから、
呼び出したい関数の直前に、
適当に変数を宣言して、その変数にcvCreateMat( nclusters,
params.cov_mat_type == COV_MAT_SPHERICAL ? 1 : dims, CV_64FC1 )
の戻り値を代入して、printfで中身見るか、gdbで中身見るというC使いの妄想を垂れ流してみる。
クラスについてよく分からないから、正しいのか分からないけれど。
02722712008/01/19(土) 21:19:32
せめて、何か反応してくれよ〜
こんな感じでうまくいくんじゃね?とか駄目とか。
0273デフォルトの名無しさん2008/01/19(土) 22:58:26
カラー画像から色での2値化で切り抜いているのですが
色の境目のにじみできれいに切り抜けていません。
にじみをとれるようなフィルタってないでしょうか。
0274デフォルトの名無しさん2008/01/20(日) 13:13:25
>>273
ここはOpenCVの・・・
0275デフォルトの名無しさん2008/01/20(日) 15:09:07
>>273
色での二値化の意味がわからん。
各チャネルに分解してcvThresholdかましてcvAnd、また結合すりゃおk
0276デフォルトの名無しさん2008/01/20(日) 15:36:20
>>275
その方法でやってます。
jpegの写真を処理しているのですが、色の境目の
ところがグラデーションになっていて、それがノイズになって
誤検出してしまいます。
そいつを取り除きたいのですが・・・・・
ちなみにHSV色空間でやってます。


0277デフォルトの名無しさん2008/01/20(日) 15:45:16
>>276
グレイスケール→平滑化→二値化
0278デフォルトの名無しさん2008/01/20(日) 16:27:33
>>277
グラデーションをとって
ぼかしを除去したいので
平滑化とは逆のような気がするんだけど


0279デフォルトの名無しさん2008/01/20(日) 16:52:51
>>278
二値化した時のノイズが何を指してるのかよくわからんけど
小領域でぶつぶつ小さく領域が切り分けられることじゃないの?
ぼかしをとるって、減色の処理を加えても二値化の結果はあまり変わらないと思うけど、何がしたいの?

単に陰影で物体の形状を奇麗に切り取れないって言うなら自分で高度なアルゴリズムを調べるしかないんじゃないの?
0280デフォルトの名無しさん2008/01/20(日) 17:05:58
形状を滑らかに抽出するならSnakesが実装されてなかったっけ?
0281デフォルトの名無しさん2008/01/20(日) 17:09:27
>>279
まとまりのない質問ですみません。
切り取った形状の淵がすごいギザギザになるので
何とかならないかと思って・・・・

減色してもあまり効果は見込めないですね

入力画像に問題があると思うのでそちらを
見直してみます。
0282デフォルトの名無しさん2008/01/20(日) 17:13:47
>>281
なら平滑化してみなよ
やらないよりいくらかましだと思うけど
0283デフォルトの名無しさん2008/01/20(日) 17:26:44
>>281
まるっきり画像処理に関する質問だな。
色認識の論文とか調べればいい方法あるんじゃないの?

正確性を気にせずギザギザがとりたいのなら
検出結果側にフィルタをかければいいと思うが。
0284デフォルトの名無しさん2008/01/20(日) 17:54:05
>>281
ほれ。丁度出てたぞ。
http://opencv.jp/sample/object_tracking.html#snake
0285デフォルトの名無しさん2008/01/20(日) 18:16:56
>>282,>>283,>>284
スレ違いなのにすみません。
とりあえず全部実験してみます。

何だかjpeg形式にも問題があるような気が
するので、bmpとかでもやってみます。
0286デフォルトの名無しさん2008/01/20(日) 21:20:57
thresholdにヒステリシス特性のあるフィルタをかます
0287デフォルトの名無しさん2008/01/20(日) 23:41:26
265さんのツッコミが素敵です。
ただ、信号処理の観点から265のツッコミをみると101/100のリサンプルすればいいだけ。簡単にできるお

質問者のやりたいことはもっとレベル低いとはおもう
0288デフォルトの名無しさん2008/01/21(月) 00:49:15
>>287
>100×100サイズの画像なら
という前提があるのでリサンプリングしてもやっぱり無理。
0289デフォルトの名無しさん2008/01/21(月) 01:32:45
その通りですね。
よくよんでみて気がついた。
100×100の画像で0〜100の座標はないわ。
0290デフォルトの名無しさん2008/01/23(水) 10:21:25
質問です。
cvLoadImageで読み込んだ画像をウィンドウに表示するとグレーの歪んだ画像が表示されます。
画像の拡大などをして保存しても歪んだ画像が保存されます。
原因がわからないので知ってる方がいたら教えてください。

Xcodeを使っています。
0291デフォルトの名無しさん2008/01/23(水) 10:28:35
プログラムは思ったとおりには動かない
書いたとおりに動く
0292デフォルトの名無しさん2008/01/23(水) 11:39:37
>>291
至言だな
0293デフォルトの名無しさん2008/01/23(水) 22:06:38
だな。

書いたコードもどう動かしたいかもわからないで答えられるわけがないな

でも、IPLImageの確保サイズや色の指定が違うんだろう。と、ゆとりにいってみる
02942902008/01/24(木) 05:54:41
ウィンドウズの方でコードを書いたら正常に動作しました。
0295デフォルトの名無しさん2008/01/24(木) 18:24:46
>>291は良い言葉だが、この場合は「Macは糞」が正解だったようだな

てかwinあんならwin使えばいいじゃん
0296デフォルトの名無しさん2008/01/24(木) 21:59:11
どちらにしろ
もっともシンプルなコード書いて実験だな
んでコード晒せ
バグがあるのかも知れんね
0297デフォルトの名無しさん2008/01/24(木) 22:22:27
Macで使っているが、特に問題はない。
>>290
のコードが悪かったとしか思えない。
0298デフォルトの名無しさん2008/01/24(木) 23:04:14
だろうな。LoadImageなんて根本的なとこでバグってたらOpenCVの機能の大半使えないもんな
0299デフォルトの名無しさん2008/01/26(土) 21:16:02
単眼カメラでカメラで取得した座標から実空間の座標を
求めたいんですけど、みなさんどうやってもとめてますか?
あと、実空間と画像との誤差はどれくらいでるのか気になります。
OPENCVでやりたいなと思っています。よろしくお願いします。
0300デフォルトの名無しさん2008/01/26(土) 21:45:25
>>299
キャリブレするか特定の平面からしか無理じゃね?
0301デフォルトの名無しさん2008/01/27(日) 00:17:51
229
真上からのカメラ映像があれば後は基準となる物から座標補正してやればおk

なんか最近それ関連の仕事きたなぁ
0302デフォルトの名無しさん2008/01/28(月) 15:42:02
OpenCVでニューラルネットワークを使おうと思ってるんですが
CvANN_MLP mlp;
float test_input[8] = { 0.0, 0.0,
0.0, 1.0,
1.0, 0.0,
1.0, 1.0 };
float test_output[4] = { 0, 0, 0, 1 };

CvMat test_input_mat = cvMat( 2, 4, CV_32FC1, test_input );
CvMat test_output_mat = cvMat( 1, 4, CV_32FC1, test_output );

int nc[3]={ 2, 2, 1 };
CvMat NSeting = cvMat( 1, 3, CV_32SC1, nc );

mlp.create( &NSeting, CvANN_MLP::SIGMOID_SYM, 1, 1 );

mlp.train( &test_input_mat, &test_output_mat, 0, 0,
CvANN_MLP_TrainParams(
cvTermCriteria( CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 1000, 1E-100 ),
CvANN_MLP_TrainParams::RPROP, 0.05 ), 0 );
こうすると
Bad argument( input training data should be a floating-point matrix withthe number of rows equal to the number of training samples and the number of columns equal to the size of 0-th (input) layer
と出ます。
入力とNNの入力層の数が違うといわれてるらしいのですが2と2で同じだと思うし原因が分かりません。
使ったことある方教えてください。
0303デフォルトの名無しさん2008/01/29(火) 22:39:24
不完全な円(画像から一部がはみだしている)を検出したいのですが
cvHoughCircles では無理でしょうか。
よろしくお願いいたします。
0304デフォルトの名無しさん2008/01/30(水) 02:52:45
もっとデカいIplImageの中心にROI設定してCopyしてからHoughやってみたら?
0305デフォルトの名無しさん2008/01/30(水) 06:39:46
>>302
使ったことないけどググってみた感じ
CvMat test_input_mat = cvMat( 4, 2, CV_32FC1, test_input );
CvMat test_output_mat = cvMat( 4, 1, CV_32FC1, test_output );
っぽい気がする
0306デフォルトの名無しさん2008/01/31(木) 08:37:54
>>299
ゲーム制作板の企画スレ見てみ
「企画」で検索な
0307デフォルトの名無しさん2008/01/31(木) 08:44:07
http://pc11.2ch.net/test/read.cgi/gamedev/1143516726/
0308デフォルトの名無しさん2008/01/31(木) 21:44:41
OpenCV初心者なのですが、OpenCVをWindows form applicationで使えますか?
使おうとしているのですが、なかなかうまくいきません。
使えるのであればどのように設定すればよいか教えてください。
よろしくお願いします。
0309デフォルトの名無しさん2008/01/31(木) 22:34:26
初心者という表現は使うな。関係ない

formApplicationで使える。というかVCでもVBでもライブラリが使えない言語はほとんどないぞ?

で、何の開発ツール使っているの?
0310デフォルトの名無しさん2008/01/31(木) 23:29:22
DirectXでのレンダリング画像を1秒ごとにhoge.jpgに上書き保存していき、これを逐次OpenCVで画像処理したいのですがうまくいきません。

int main( int argc, char** argv ){
CvMat *map_matrix;
CvPoint2D32f src_pnt[4], dst_pnt[4];
// 画像ファイル読み込み
for(;;){
filename = argc == 2 ? argv[1] : (char*)"hoge.jpg";
if((src_img = cvLoadImage( filename, 1)) == 0 )
return -1;
dst_img = cvCloneImage (src_img);
/*
画像処理
*/
cvNamedWindow ("dst", 0);
cvResizeWindow("dst", 1270, 965);
cvShowImage ("dst", dst_img);
c = cvWaitKey (0);
if (c == '\x1b')
break;
}
cvDestroyWindow("dst");
}

上記はメインの中身なのですが、このままではキーボード入力をしないと画像が更新されません。
これをキーボード入力なしでおこないたいのですが、どのようにすればよろしいのでしょうか。
0311デフォルトの名無しさん2008/01/31(木) 23:41:52
OpenCVの話じゃないな
0312デフォルトの名無しさん2008/02/01(金) 00:02:15
>311
申し訳ございません。
OpenCVを用いているのでここに書き込ませていただいたのですが他をあたってみます。
0313デフォルトの名無しさん2008/02/01(金) 00:43:07
cvWaitKeyしなければキーボード入力を待たずに処理するよ。
0314デフォルトの名無しさん2008/02/01(金) 01:02:37
>>310
あっという間にメモリ食い潰しそうだなw
ループの前にIplImage確保しといてcvCopyImageにしとけ。
あとcvWaitKey(10)とかやっときゃキー入力待ちのウェイトが10msになって
入力が無い時は勝手に回るようになる
0315デフォルトの名無しさん2008/02/01(金) 02:46:07
>>309
>>308です。
フリーで配布されているMaicrosoft visual c++ 2005 Express Editionです。
「追加の依存ファイル」にhighgui.hとか貼り付けて#includeすれば
formApplicationで使えると思ったのですが、うまくいっていない
というのが今現在の状態です。
0316デフォルトの名無しさん2008/02/01(金) 02:48:37
え”・・・。
0317デフォルトの名無しさん2008/02/01(金) 02:54:53
間違えました。
highgui.h→highgui.lib
0318デフォルトの名無しさん2008/02/01(金) 02:56:18
まあ、エラーメッセージくらい書いてくれないと何にもわからないよ
0319デフォルトの名無しさん2008/02/01(金) 03:30:51
わからないなら黙っててください。
0320デフォルトの名無しさん2008/02/01(金) 03:41:36
・・・
0321デフォルトの名無しさん2008/02/01(金) 04:50:26
ホスト名 www.megavideo.com
IPアドレス 209.222.148.141
Webサーバー Apache
OS Linux
ページ取得時間 0.5 秒

Registrant:
Megavideo Limited
Room 1204, 12/F
48-62 Hennessy Road
Wan Chai, Hong Kong
Hong Kong

Registrar: DOTREGISTRAR
Domain Name: MEGAVIDEO.COM
Created on: 13-NOV-00
Expires on: 13-NOV-14
Last Updated on: 17-OCT-07

Administrative, Technical Contact:
Limited, Megavideo [email protected]
Room 1204, 12/F
48-62 Hennessy Road
Wan Chai, Hong Kong
Hong Kong
+852.30173700
0322デフォルトの名無しさん2008/02/01(金) 07:24:49
>>317
VCでのライブラリの扱い方がわかんないんだね。

ヘッダだけのインクルードでは外部参照エラーになるよ(あたりまえ)

OpenCVのフォルダのなかにある*.libファイルをソースが並んでるところにほおりこんでみな
0323デフォルトの名無しさん2008/02/01(金) 07:35:18
その前にフォームアプリケーションもビルドできるかすら怪しい
0324デフォルトの名無しさん2008/02/01(金) 07:44:07
OpenCV 以前だよ〜。VC のスレにでもいけよ〜。
0325デフォルトの名無しさん2008/02/02(土) 02:23:42
>>318さん
原因と思われるエラーメッセージです

1>c:\program files\opencv\cxcore\include\cxtypes.h(212) : warning C4793: '__asm' : 関数 'int cvRound(double)' 用にネイティブ コードの生成が発生します
1> c:\program files\opencv\cxcore\include\cxtypes.h(205) : 'cvRound' の宣言を確認してください。
1>c:\program files\opencv\cv\include\cvcompat.h(784) : warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

>>322さんの方法を試しましたが、うまくできませんでした
0326デフォルトの名無しさん2008/02/02(土) 02:28:53
C4793でググってみるといいよ
0327デフォルトの名無しさん2008/02/02(土) 03:52:53
大学の情報学科もピンキリなんだなぁ。
0328デフォルトの名無しさん2008/02/02(土) 14:13:11
インクルードするヘッダはちゃんとパス通ってるのか?

どちらにせよOpenCVに限らず、ライブラリを使えるようになれるといいな
(この板はC初心者スレではないから)

どーしてもというならプロジェクト作ってやるけど
0329デフォルトの名無しさん2008/02/02(土) 15:25:21
パスの設定はしました。
皆さんの話からOpenCVじゃなくて
VCの使い方が問題のようなので
もっといろいろ調べてみます
いろいろありがとうございました。
0330デフォルトの名無しさん2008/02/02(土) 16:09:12
VC++は(フリーのやつに限らず)MS独自拡張Cモードでプロジェクトを作る。
これをOFFにしてANSI-CモードにするのがVC++の最初の一歩です。
0331デフォルトの名無しさん2008/02/03(日) 03:37:06
OpenCVをC#で使えるようにしたラッパーありますか?
■ このスレッドは過去ログ倉庫に格納されています