OpenCVとはインテルが開発・公開しているオープンソースのコンピュータビジョン向けのLinux/Windows向けC/C++ライブラリです。
実装分野は
・ユーザーインターフェイス
・物体分離
・セグメンテーションと認識
・顔認識システム
・ジェスチャー認識
・モーショントラッキング
・感情モーション
・モーション理解
・モーションからの構築(SFM)
・モバイルロボティクス
前スレ
【Intel】OpenCV総合スレ【画像処理】
http://pc11.2ch.net/test/read.cgi/tech/1182830261/ 関連リンクなどは
>2-10くらい
次スレ立てたところで質問です。
動画から物体Xを捜してその物体Xだけを綺麗に抜き出したいのですが上手くいきません。
なにかいい方法教えてください
ちなみに物体Xは例えば袋とかの時もあり、常に直線のみや曲線のみで構成されてるとは限りません。
とりあえずその物体Xの特徴からある程度の位置を割り出してその辺りの部分だけを抜き出す。
ここまではおおざっぱにですがどうにか成功しました。次は
グレースケール化→二値化→cvFindContoursで輪郭抽出またはエッジ抽出
でやってみたのですが二値化の時点で微妙に欠けたりはみ出たりして輪郭もエッジ
もうまくとれません。綺麗にその物体Xを抜き出す処理の手順とできれば使用する
関数も教えてもらえたら助かります
…エスパーさん、出番でーす
熱した針金をあててやるといい
cvHaarDetectObjectsが入力画像を上下反転させないと認識してくれないんですが
仕様ですか?バグですか?
後々も座標上下反対に考えないといけないんでコマリマックス
君のカン違い
cvFindContoursで得たCvSeqの輪郭の内側の部分だけを抜き出すにはどうすればできますか?
cvNextTreeNodeで輪郭ひとつ抜き出してCV_GET_SEQ_ELEMで座標みて外側を黒に、
内側を白に塗りつぶしてマスク作ってコピーするしかない?
もっと簡単に出来る方法あれば教えてください
>5
画像処理は基本的に個別対応しかない。
テンプレートマッチング&Sobelなどの基本操作で無理ならば、対象画像を示す以外に回答は出ない。
cvCaptureFromeAVIって関数あったけど,OpenCVが1.10になったとき
読めるAVIのコーデックの種類とかって増えたりした?
>>12 前バージョンからシステムに依存してたから関係ないと思う.
WindowsならCCCP導入後にH.264とか読み込めるからさ.
cvStereoRectifyで使用してるアルゴリズムの元論文って知ってる人いない?
Uncalibratedのときはhartleyって載ってるんだけど
OpenCV用にPCを一台組みたいんだけど、やっぱり、Intelを使った方がいいのかな?
今のテスト環境は、AthlonX2 4000+で速度的に不満が無いレベルだからkumaを使えば
もう少し幸せになれるかなと思ってます。
ソースを読む限りは特にSSEやマルチスレッドを使ってる訳では無さそうなので、
クロックとキャッシュ容量で差がつくのかなと考えてます。
だけど、タダで使わせて貰ってるんだからIntelに貢献するべきかな?
17 :
12:2009/01/07(水) 02:26:42
>>14 ありがと,OpenCVじゃDX50くらいしか読み込めないと思ってたから.
18 :
デフォルトの名無しさん:2009/01/07(水) 11:20:41
>>16 速度的に不満がないならこれ以上幸せになりようがないと思いますw
ハード板住民垂涎の品のみで周辺機器が構成されているなら
CPUにお金使ってもいいんじゃないwもう他に使い道ないでしょwww
19 :
デフォルトの名無しさん:2009/01/07(水) 21:57:03
サンプルプログラムの中の(エッジの検出 cvSobel,cvLaplace,cvCanny)と
(画像の二値化 cvThreshold, cvAdaptiveThreshold)についてなんですが、
サンプルプログラムを実行するとそれぞれ
edge.c:21: error: too few arguments to function 'cvSobel'
edge.c:22: error: too few arguments to function 'cvConvertScaleAbs'
edge.c:25: error: too few arguments to function 'cvLaplace'
edge.c:26: error: too few arguments to function 'cvConvertScaleAbs'
edge.c:29: error: too few arguments to function 'cvCanny'
及び
nitika2.c:26: error: too few arguments to function 'cvSmooth'
nitika2.c:35: error: too few arguments to function 'cvAnd'
nitika2.c:39: error: too few arguments to function 'cvSmooth'
nitika2.c:40: error: too few arguments to function 'cvAnd'
という同様のエラーが出てしまいます。
どなたか分かる方がいたら教えて頂けないでしょうか。
>>19 辞書引こうよ.
引数が少なすぎます って意味です.
リファレンスをちゃんと読めば解決できるよ.
>>19 C++としてコンパイルする。あるいは、
デフォルト引数を使えない言語としてコンパイルするなら、
ちゃんと足りない引数を自分で与えなきゃだめだよ。
…
って書いてあったよ。
22 :
デフォルトの名無しさん:2009/01/09(金) 00:25:00
分かりました。
さっそく、いろいろ試してみたいと思います。
ありがとうございました。
今 OpenC Vの IplImage 内のメンバ ImageDate 内の値を直接参照してたんですけど.
普通に値をとろうとして int にキャストしてたんですよ.
そしたらマイナスの値がでて正確なRGB値がよくわからずにいたんです.
+127とか(unsigned int)とかして正しい数値をとろうとしてもうまくいきませんでした.
それでリファレンスサイトのサンプルコードを見て,(unsigned char)で値を受けてからキャストしてみたんですよ.
そしたらようやく正確なRGB値を取ることができました.
質問ではないんですけど嬉しくって報告しました.
失礼しました.
IplImage作った人はなんでcharでBGRの順にピクセル並べようと思ったんだろうな
なんか利点あるの?
リトルエンディアンと相性が良くて,作ったのがIntelだから
DEPTH_8U形式のイメージにcvFilter2Dで
フィルタをかけているんだけど、
結果が負のときってどうなるの
cvMatとかをデバックプリントする簡単な関数ないの?
>>26 結果が負って何?cvFilter2Dはvoid関数だったけど?
ラプラシアンとかで画素が負になったらって事だろ。
画素のcharの値が負ってことか?普通じゃん
出力してためせばいいじゃねえか
>>26です。
リファレンスのサンプルだとcvSolveやcvLaplaceは
8U(符号無し)で入力して、16S(符号付)で出力をした後
cvConvertScaleAbsで8Uに戻してる。
cvFilter2Dも同じ様にするのかなと思ったんだけど、cvFilter2Dは入力と出力のタイプ
を同じにしないとエラーになるので、あれっ?っとなった。
自作のフィルタでためしたところ、負の画素はゼロになってるようなんだけど、
これであってるのかな?
mixiの質問スレが低レベルすぎて泣ける
33 :
デフォルトの名無しさん:2009/01/21(水) 00:56:35
前スレであった目の位置の特定で、
検出の精度をあげるソースってだれか持ってる?
1.1preの方の変更点とかここでまとめて行こうぜ
35 :
デフォルトの名無しさん:2009/01/23(金) 06:13:25
cvcreatematで20000*20000のマトリクスを使って計算しようとしたんですけど、
メモリエラーが起きて計算できませんでした。
エラーを回避する方法はないでしょうか
>>35 いっぺんに計算する必要が無ければ分割したら?
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ まピョーん☆
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
38 :
35:2009/01/23(金) 09:10:24
そうですよね。
システムのメモリ確保領域をふやしたり、いろいろやってみましたけど、無理でした。
式を作り直して分割しないと無理そうですね。
やってみます。
64bit OS使ってる?
Windowsでopencv+ffmpeg環境を作ろうとしているのですが,
opencv1.1pre1に使うffmpegの推奨revはどこを参照すれば分かりますか?
動作報告も頂けるとありがたいです.
質問です。
例えば、右上には黄色い四角、左下には赤い四角が有る
と言う事をOpenCVの関数だけを使って認識する事は可能ですか?
それとも、黄色い四角、赤い四角があるというだけで、
右上や左下は認識できないでしょうか?
main関数がOpenCVのAPIじゃないからな。無理。
>>41 物体があることは分かってる?
重心座標でよければそれぞれの物体を切り出した2値画像に
cvMoments, cvGetSpatialMomentでいけそうな気がします。
44 :
デフォルトの名無しさん:2009/01/26(月) 20:19:10
数千枚の中から大きさが違うだけの同じ画像を見つけるためにcvMatchShapesを使ったのですが
同一画像はマッチ度10位前後になってしまいます。
小さい画像をcvLoadImageしてから大きい画像と同じ大きさに拡大したところ1位になりましたが、
大きい画像を小さい画像にして比較するとまたマッチ度は10位前後になってしまいます。
大きさの違うだけの画像を見つけ出すうまい方法ってありませんか?
45 :
デフォルトの名無しさん:2009/01/26(月) 20:53:02
>>44 初心者にはお勧めしませんが、Linuxが使えるならGimpで出来ます。
46 :
デフォルトの名無しさん:2009/01/27(火) 01:03:36
複数カメラの取り込みを、VideoInputを使って以下のページを参考にして作りました。
ttp://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/複数台のカメラ.html ソースはほぼこのままで、2カメラにしただけです。
するとUSBカメラ(device0)の方は固まりがちで1fpsもでないくらいなのに、
ノートPCに内臓されてるカメラ(device1)の方は解像度が高くしてもスムーズに動作します。
USBの方はYUY2->RGB24の変換をしてるみたいなのでここに時間がかかってるんでしょうか?
VideoInputの出力を貼っておきます。
***** VIDEOINPUT LIBRARY - 0.1991 - TFW07 *****
VIDEOINPUT SPY MODE!
SETUP: Looking For Capture Devices
SETUP: 0) USB モヌェ ヌミ、ケ
SETUP: 1) Integrated Camera
SETUP: 2 Device(s) found
SETUP: Setting up device 0
SETUP: USB モヌェ ヌミ、ケ
SETUP: Couldn't find preview pin using SmartTee
SETUP: Setting capture size to 320 by 240
SETUP: Media Type is YUY2 converted to RGB24
SETUP: Capture callback set
SETUP: Device is setup and ready to capture.
SETUP: Setting up device 1
SETUP: Integrated Camera
SETUP: Couldn't find preview pin using SmartTee
SETUP: Setting capture size to 320 by 240
SETUP: Media Type is RGB24 no conversion needed
SETUP: Capture callback set
SETUP: Device is setup and ready to capture.
47 :
46:2009/01/27(火) 01:10:35
>>46 自己解決しました。
VideoInputのusb devices - PLEASE READ.txtを読んでませんでした。
USBポートの電源の管理の設定を変えるとで解決しました。
スレ汚しスマソ
>>45 Gimpはレタッチソフトですよね?
サムネイルが作りたいわけではなくて、サムネイル画像を探したいんです。
それともLinuxバージョンのGimpのみに画像比較機能があるんでしょうか?
>>48 scriptFuをマスターしている奴はおらぬか
50 :
デフォルトの名無しさん:2009/01/27(火) 14:35:05
OpenCVで画像のエッジを抽出する際にガウシアンフィルタをかけて,
ラプラシアンフィルタをかけたあとで,ゼロクロス画像を得ることは可能ですか?
自分でその順番通りに書けば得られるよ
>>48 画像全体の大きさが違うだけで、
一部だけ切り取られたり回転したりしてないんなら
単純に大きさをそろえて差分をみればいいんじゃない?
Learning OpenCVは読みやすいね
大学生レベルの英語ができる人なら普通に読めると思う
夏に日本語版出るらしいけどな
>>50 >ゼロクロス画像を得ることは可能ですか?
セクロス画像を得ることができますかに見えた俺はもう末期。
CvCalibFilterって、リファレンスマニュアルにみつからないのですが
どこかに解説があるのでしょうか?
ちょっと質問です.
ゼロクロス画像というのは,2値のみで表されるエッジ画像という認識であっていますか?
//
/ / パカッ
//⌒)∩__∩
/.| .| ノ ヽ
/ | | ● ● |
/ | 彡 ( _●_) ミ intel owattel !!
/ | ヽ |∪| /_
// │ ヽノ \/
" ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
ところがどっこい、もうIntel関係ない
videoInputでキャプチャした映像を
cvCreateVideoWriterを使ってファイルに保存したいのですが
処理が重いので困っています
QVGAのカメラが2つあるだけでカクカクになってしまいます
非圧縮でやっているので、処理としては取り込みとキーの判定だけです
なのでなぜこんなに重くなるのかがわかりません
キャプチャした画をウィンドウ表示しているときはそんなに遅くないように見えるのですが
AVIにするのにそんなに時間がかかるのでしょうか。
それともカメラ2台でそんなに厳しいのでしょうか
>>60 QVGAのピクセル数×3(色数)×15(くらいか?fps)=?
これを常時HDDに書き込んでいる。
バカデカいIplImageの配列を確保してCopyImageすりゃ速い。
SaveImageは後でやる。
62 :
デフォルトの名無しさん:2009/02/05(木) 14:23:38
OpenCvに自分の作ったプログラムを投稿してみたいんですが、やりかたってわかりますか?
63 :
デフォルトの名無しさん:2009/02/05(木) 14:26:04
>56
ソースコード読んでみたら?
64 :
デフォルトの名無しさん:2009/02/05(木) 16:16:03
1.1preのサンプルってVC2008で動くんですか?
さっぱり動かんです。
環境も書かずに動くだの動かないだの言っている奴がム板にいること自体が疑問
66 :
デフォルトの名無しさん:2009/02/05(木) 18:11:31
osのことでしたら、xpです。
>>64 動かないのはPCがイかれてるかキミの設定が悪いかだ,こんなところに書き込むより周りの人に相談しなさい
68 :
デフォルトの名無しさん:2009/02/05(木) 18:20:15
氏ね
こんな動作になる事を想定しているのに別のこんな動作になってしまうのだが
コードが問題なのではなくてVS2008が原因である事を確認するために
こんなテストをしてその結果がこうなったからだ。
くらい書いて欲しいって事かな、簡単に言うと。
70 :
デフォルトの名無しさん:2009/02/05(木) 20:50:39
日本語でおk
71 :
60:2009/02/05(木) 22:35:22
>>61 トンクス。
HDDの書き込み速度がわからないけど、
確かにメモリに入る限り詰め込んだ方がよさそうですね
やってみます。ありがとうございました。
>>64 サンプル動かすのにVCかどうかなんて関係ないと思うけど、
なんなら自分でビルドし直したら?
73 :
60:2009/02/06(金) 00:55:07
2カメラからキャプチャした映像を一度メモリにひたすら保存して
キャプチャ後にファイルに保存するようにしたところ
カクカク感が解消されました!
でも1カメと2カメでフレームレートが全然違います。
処理の順番に影響されるのかな?
つい最近リリースされたvideoInputはフレームレートが設定できるそうなので
明日か週末にでも試してみます
USBカメラでもうまくいくのかどうか
1.1はインテルの何とかを前提にしてるみたいだから、
リビルドする時はそれに非対応の奴を選んで、
ついでにいくつか出る警告を無視してリビルドすれば
VC2008でもサンプルが普通に動いたな.
∩_∩ 人人人人人人人人人人人人人人人人人人人人人人人人人人人人人
/ / \\ < すごい新参感を感じる。今までにない何か酷い新参感を。 >
| (゚)=(゚) | < 厨・・・流入してきてる確実に、コピペブログから、俺たちのほうに。 >
| ●_● | < 雑談はやめよう、とにかく最後までネタ作ってやろうじゃん。 >
/ ヽ < ネットの画面の向こうには沢山のゆとりがいる。決して一人じゃない。 >
| 〃 ------ ヾ | < 戦おう。そしてともにネタを投稿しよう。 >
\__二__ノ < ゆとりや厨の糞レスは入るだろうけど、絶対に流されるなよ。 >
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
>>73 USBコントローラの帯域制限に引っ掛かってない?
videoInputでカメラの設定ダイヤログを開いてUSBの帯域を下げるか、別のUSBコントローラに刺すとか。
77 :
デフォルトの名無しさん:2009/02/07(土) 01:32:21
78 :
73:2009/02/09(月) 01:10:17
>>78 デスクトップを組んだ事があれば分かると思うが、マザーボード上あるいは拡張ボードで
根っこから別のポートになっていれば独立したUSBコントローラ。
前と後ろのポートを使えば大抵別だと思う。
エピポーラ線書く関数ってなんかバグない?係数はおかしくないのに線の傾きがなぜか0になるんだが。
大した手間でもないから結局自分で書いたけど。
あとcvBlobslibも全然使えないね。地の画素値が0だとカウントしてくんないし。
だれか使い勝手のいいラベリング実装してないかね。
↑間違えた。地の画素値が255だとね。
反転すりゃ良いだけじゃないの?
2値画像ならそれでいいんだけど多値だといろいろめんどい。
多値画像対応を謳ってるけど画像の4辺が255で囲まれてると対応してくれないんだよ。
多値画像だと単純に反転というわけにはいかない
そりゃ我侭だろw
文句あんならソースに手を加えれば良い。
86 :
デフォルトの名無しさん:2009/02/14(土) 14:48:39
ネットワークカメラからbmp画像を取得して動画にしているんですが、
録画するのに
カメラから画像をキャプチャし、ファイルに書き出すやりかたがわかりません
cvcaptureじゃ取り込めないみたいだからどーすればいいか分かる方いらっしゃいますか?
88 :
デフォルトの名無しさん:2009/02/14(土) 19:23:41
Rebuild the library with Windows, GTK+ 2.x or Carbon supportすればいい
90 :
デフォルトの名無しさん:2009/02/14(土) 20:42:34
>>87さん
そういうことです;;
ネットワークカメラから、そのプログラムを利用して録画したいんですが・・・
>>90 ネットワークカメラのことがわからないんだけど、
OpenCVでは認識できないからキャプチャーできないってことかな
カメラの映像はBMPでとってくるしか手段がないの?
そうなら
>>87の例のキャプチャ部分(cvQueryFrame())の変わりに、
そのBMPをcvLoadImageで読み込む処理を入れたらよさそう
Condensationを使って複数の物体を追いかけたいと思っていますが、
今ひとつ使い方が理解できていません。
http://opencv.jp/sample/estimators.html#condensation では
cvConDensInitSampleSetのupperとlowerで画像全体を指定していますが、
特定の初期位置がわかっているものを追いかける場合は
ここでその位置を与えてやればよいのでしょうか。
また、対象が複数ある場合はそれぞれのCvConDensationを用意するのでしょうか。
二つの位置が重なったとき、両方のパーティクルが片方についていかないための工夫があれば教えてください。
速度の違いがあれば分離できるのかな……
94 :
デフォルトの名無しさん:2009/02/16(月) 22:32:12
初心者です。
OPEV_CVのコンパイルがどうしてもできなく困っているので教えて下さい。
OS Vista
コンパイラ Visual Stadio 2005 professional SP
.NET Freamwork Sp2
Open CVのインクルードファイルやライブラリ、プロジェクトの設定などは
http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB を参考に行っています。
他のXPのPCで行うと動くのですが、なぜかVisutaで動きません。
OPENCVはOSに依存するのでしょうか?
自分のPCはVisutaなのほとほと困っています。
エラーはプログラムによって変化し、
C1083: include ファイルを開けません。'afxwin.h': No such file or directory
や、
fatal error LNK1104: ファイル 'cxcored.lib' を開くことができません。 cvsample
です。
他のPCで動きます。
また、VSもフルイントールしています。
>>94 試しにVisual Studioを管理者として実行させてみ
Visuta www
>>96 俺は微笑ましい気持ちになった。今夜はよくネムレソウダ
Vista環境だとインスト先とか変わる可能性があるから
パスがあってないんだろうな、
と思うけど、そもそもOpenCVの質問じゃないだろうから、
がんばれ、って言いたい・・・・・・・・・・・・・・・・
C1083: include ファイルを開けません。'afxwin.h': No such file or directory
==============================
そんなファイルかディレクトリはないよ!
100 :
デフォルトの名無しさん:2009/02/18(水) 19:12:11
>>95、98
ありがとうございます。
原因なんですけれども、OpenCVのバージョンの問題でした。
良く見たら1.1を使用していました。
なので1.0を入れたらサンプルプログラムの方はすんなりと動いてくれました。
ただしビルドしたいプログラムは、MFCのところは動かなかったです。
原因はまだわかりません。XPだと動いてくれたのですが…
他も調べてみます。ありがとうございました。
102 :
デフォルトの名無しさん:2009/02/19(木) 00:57:08
?
103 :
デフォルトの名無しさん:2009/02/21(土) 19:23:35
afxwin.hはMFCの一部だから
製品版VCが入ってないと無いんじゃね
Windows SDKのサンプルからコピってくればいいと思うが
プログラミングを何も知らないのにいきなりOpenCVから始めようって人結構いるもんだね
趣味じゃなくて、必要に迫られてはじめるとそうなるのが自然かもね
>>93 >cvConDensInitSampleSetのupperとlowerで画像全体を指定していますが、
>特定の初期位置がわかっているものを追いかける場合は
>ここでその位置を与えてやればよいのでしょうか。
理論的には、その初期位置の確率を 1.0 、それ以外を 0.0 にすればいいわけで、
うん、それで実現できるんじゃないですかね。
>また、対象が複数ある場合はそれぞれのCvConDensationを用意するのでしょうか。
CONDENSATION は一応、トラックするオブジェクトの動き分布がガウシアンじゃなくても、
つまり、例えば複数個の Gaussian の重ね合わせとかだったとしてもうまくトラックできる、
というのが Kalman Filter に対してのウリだから、
1つの CONDENSATION で複数個のオブジェクトをトラックできるはずなんだけど、
実際にやってみると、あんまりうまくいかないんだよねぇ。
それぞれに対して1つ用意するほうがいいみたい。
>二つの位置が重なったとき、両方のパーティクルが片方についていかないための工夫があれば教えてください。
どっかで読んだ気もしたけれど、あまり「すごい工夫だな!」とは思わなくて覚えてないや。すまそ。
http://opencv.jp/sample/estimators.html#condensation しかし、この例あまりよくないよね。
トラック状態が x,y だけの width とかのない点単位でのトラックだし、
そもそも表示が likelihood を反映せずに、全部の particle 表示しているだけだから、
なにやってんだろう、ってかんじに見えてしまう。
せめて、likelihood が一定以上なら表示、とかにしてくれないと。
というか、ボールらしさ、を表現するようにして、x,y,radius の状態をもつようにして、
最後の表示は mean を表示するとか、likelihood が max の particle を表示するように
するとかしてほしかった。
>>44 >小さい画像をcvLoadImageしてから大きい画像と同じ大きさに拡大したところ1位になりましたが、
>大きい画像を小さい画像にして比較するとまたマッチ度は10位前後になってしまいます。
なんでだろうね。変なの。詳細考察きぼんぬ。
>>50 OpenCV にゼロクロス検出関数あったっけ?ないか。
自分で実装しないといけないのか。めんどうくさいね。
どこかに普通の C 実装はありそうだけど。
>>53 Learning OpenCV けっこう良かった。
理論もかいつまんで説明してあって、このかいつまみを読むだけでもなかなか。
ちなみにどっかにうぷされ(げふんげふん
ExtraSURFのサンプルよりもマッチング条件を厳しくするのってどこいじったらいい?
あとOpenSURFと比べたことのあるひといる?
pythonのopencvってswigで自動生成したの?
自動生成の後,多少手でいじってるの?
swig
111 :
デフォルトの名無しさん:2009/02/28(土) 11:38:47
画像処理ってどんな言語があってますの
いろいろ無駄な物作って慣れたら画像処理専門になりたいんだけど
C++ 、C、Java、C#
114 :
デフォルトの名無しさん:2009/03/01(日) 05:56:40
顔検出器のサンプルコード参考にして作成したんだけど
コンソールアプリケーションの方はうまく動いて、
フォームアプリケーションはなぜかエラーが起きるんだ・・・
環境はVC++2008
エラーの内容は
The error looks like this: Unspecified error (The node does not represent a user object (unknown type?))
in function cvRead, C:\Program Files\OpenCV\cxcore\src\cxpersistence.cpp (5040)
どうも
CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( "haarcascade_frontalface_alt.xml" );
のところが原因らしい
なぜかフォームアプリケーションだけできないなんて・・・
誰か解決策を教えてくださいm(_ _)m
>>114 haarcascade_frontalface_alt.xmlはある?
パスはあってる?
116 :
デフォルトの名無しさん:2009/03/01(日) 17:07:37
>>116 cvLoadHaarClassifierCascade使ってみたら?
118 :
117:2009/03/01(日) 17:20:03
cvLoadHaarClassifierCascadeはxml読み込めないんだな。スマソ
119 :
デフォルトの名無しさん:2009/03/01(日) 18:12:31
本当に困っているので誰か助けてもらえませんか?
120 :
デフォルトの名無しさん:2009/03/01(日) 18:53:20
すいません自己解決しました
>>117を参考にして、次のように修正したら直りました
const char* name;
name = "haarcascade_frontalface_default.xml";
CvHaarClassifierCascade* cascade = 0;
cascade = cvLoadHaarClassifierCascade(name, cvSize(1,1));
ありがとうございました
cvSize(1,1)って・・・それで動くんだ
つか結局cvLoadHaarClassifierCascadeにしてもxmlの場合はcvLoadになるみたいだな。
cvSize小さいと遅くなるんじゃない。
ウィンドウの最小サイズは、XMLに書いてある。
エラーの原因はC++にしててヘッダincludeしてなくて
デフォルト引数かABIが変になってるなど。
>>123 結局
>>120のソースだとcvLoadを呼ぶだけだからcvSizeは関係ないはず
第2引数はどんな値でもたぶん変わらない
125 :
デフォルトの名無しさん:2009/03/07(土) 07:52:09
126 :
デフォルトの名無しさん:2009/03/07(土) 08:55:36
125です
すいません事故解決しました
openCVのSVCはlibsvmが元になっていて、libsvmのリファレンスページに書いてありました
機械学習系だとopencv以外で便利なのはないかな
ググレカス
最近opencvに貢献されたコードがc++になってるのなんなの
pythonから使いにくいんだけど
132 :
デフォルトの名無しさん:2009/04/20(月) 20:18:24
opencvのpythonバージョンに関しての質問があります。
ピクセル値の参照って、どうやって行うのでしょうか?
c,c++だと、img->imageData[img->stepWidth * y + x];
みたいなことができたのですが、、、
どなたか教えていただけないでしょうか。
1chならcvGetReal2D。multiならcvGet2D。
x,yではなく行,列なので注意。
SVNのC++化は極端だよな。各種Wrapperオワタな雰囲気。
>> 133
おお。ありがとうございます。
大変助かりました!
>>133 python使うようになったらc++は使わなくなったなあ
opencvはcだからいいのであってc++になったら他にもいいのは結構あるんだな
insight tool kitとかさ
openCVのインターフェイス上で「画像の名前を指定して読み込む」みたいな方法ってありませんか?
今は、gluiを使ってやってるんだけど、それ以外ではglui使ってないので
なるべくgluiは外しておきたいんですよね。。
ありますん
マウスイベントとってダイアログ開いてcvLoadすれば
139 :
デフォルトの名無しさん:2009/05/09(土) 20:51:19
cvLoadImageで画像を取り込んだんですが
cvShowImageで表示ができません
IplImageのimageDataを見ると、
文字化けしたような値が入っているので
ロードに失敗しているような感じなんですが…
解決法知っていれば、どなたか教えていただけないでしょうか?
画像ビューワーでは見れてます。
---------コード----------
IplImage *originalImage = cvLoadImage( "aaa.jpg", CV_LOAD_IMAGE_ANYDEPTH || CV_LOAD_IMAGE_ANYCOLOR);
if( originalImage == NULL ){
puts("読み込み失敗");
return 1;
}
cvShowImage( windowNameOriginal, originalImage );
>>139 cvNamedWindowはちゃんとしてんの?
141 :
デフォルトの名無しさん:2009/05/09(土) 21:03:26
>>140 してます
全体は
int main(array<System::String ^> ^args)
{
char windowNameOriginal[] = "Original";
cvNamedWindow( windowNameOriginal, CV_WINDOW_AUTOSIZE );
IplImage *originalImage = cvLoadImage( "aaa.jpg", CV_LOAD_IMAGE_ANYDEPTH || CV_LOAD_IMAGE_ANYCOLOR);
if( originalImage == NULL ){
puts("読み込み失敗");
return 1;
}
cvShowImage( windowNameOriginal, originalImage );
getchar();
return 0;
}
な感じです。
http://oshiete1.goo.ne.jp/qa4561803.html?ans_count_asc=20 の人と似た現象なので、VCの設定問題かもしれないです。
142 :
139:2009/05/09(土) 21:38:32
getcha()で待ったのがガンだったみたいです
cvWaitKey(0);
に変えたら解決
143 :
デフォルトの名無しさん:2009/05/10(日) 18:45:31
スレチだったらごめんなさい
画角が100°程度でOPENCVで使いやすいカメラってありませんか?
>>143 一般的なUSBのやつだと75度くらいまでしか見当たらないなぁ。
haarcascade_frontalface_alt2.xmlの結果を
引き継いだカスタムの
haarcascade_frontalface_alt3.xmlを作成する
というのは簡単でしょうか
haarcascade_frontalface_alt2.xmlを学習したデータがないと無理じゃね
>>145 haarcascade_frontalface_alt2.xmlの内容をフォルダ形式(txt形式)に直して、haartrainingの-dataにそのフォルダを渡せば続きのステージから学習はできるはず。
>>143 値段は5万を超えるけど、アルゴが扱っているImageing source社の
産業用USBカメラ+CマウントレンズならOPENCVでも使えるし
画角100度以上が選べるよ。
undistort2で歪み除去後の画像の光学中心が画像中心にならないんだけど
たとえばVGAサイズで以下のような内部パラメータのとき
320 0 340
A=0 320 250
0 0 1
補正前の画像中心(340, 250)が補正後(320, 240)に来るはずだよね?
なぜかさらにずれて(360, 260)になる。
試しに内部パラメータの画像中心を(300, 230)に設定すると補正後の中心は(320, 240)になる。
なんで????
>>149 価格がぶっ飛んでますね・・・
金銭的に買えなそうです・・・でも情報ありがとうございました!
画像の加算合成の関数とかないの?
自分で作っちゃったけど効率が悪い気がする
うまく実行されたりされなかったりするんですが何とかならないですかね…
主にトラックバーの表示なんですが
>>150なんですけど、ここの住人さんはカメラの歪み除去せずにOpenCV使ってるの?
もし歪み除去してたら同じ現象が起こるかどうか教えてもらいたいんですけど
Windows環境の1.1preでcvCreateVideoWriterで、第2引数にCV_FOURCC_PROMPTまたは-1を設定しても、
コーデックの設定画面出さずに、しかも読み込めないaviっぽいファイル(真空波動研でエラー)を出すようになってしまった。
コマンドプロンプトの出力見ると、勝手にffmpegを使って出力してるみたい。
どうもffdshowを入れてから挙動が変わったっぽいけど、ffdshowをアンインストールしても何かが残ってるのか、元に戻らない…
こういう時って、OSのクリーンインストールとhighguiのリビルド以外でどうやったらVFW使うように戻せるか情報ってある?
バージョン1.1からffmpegでDirectShow使い始めたらしく1.0の時よりだいぶ高速になってるよ。
ffmpegも更新が速いから次のバージョンではエラー無くなってるはず。
わざわざVFWなんて古いのに戻さなくてもいいんじゃない?
AVI保存のエラーはTMPGEncとかで非圧縮AVIに書き出しなおせば直ると思う。
>>150 画像が上下反転してるとかじゃない?要所要所で画像出力してみれば。
>>158 画像をLoadImageした直後にUndistort2してるだけだから反転してないのは確認済みです
>>159 ソース読めば分かるが、前バージョンからundistort2の内部が変更されたからねー
特に主点のあたりが
SVNからチェックアウトしてOpenCVのソースコードを勉強しているのですが、
OpenCVのSobelフィルタのアルゴリズムがよくわかりません。
(一般的なSobelフィルタのアルゴリズムがわからないのではありません。)
どなたか解説できる方はいらっしゃいませんでしょうか?
162 :
155:2009/05/28(木) 01:23:02
>>156 ffmpegでも実行時にビットレートやエンコードオプションの設定ができればいいんですけど、
cvCreateVideoWriterを使う限りはVFWでしか無理っすよね…
結局cvffmpeg110.dllをリネームして無理矢理VFWを使うようにしたけど、
今度はcvCreateFileCaptureあたりが動かなくなりそうだ…
>>161 どこがどう分からないのかが分からない。ビット演算とかでやってるとか?
OpenCVを使って文字認識をさせることはできますか?
>>164 出来る。
画像処理とパターン認識入門って本が役立つと思う
166 :
デフォルトの名無しさん:2009/06/06(土) 03:00:36
あ
テンプレートマッチングとかできるの
あれ
できるにきまってるじゃん。リアルタイムで。
168 :
167:2009/06/06(土) 06:25:39
>>166 「あれ」ってなんのこと?OpenCV?
>>164 手書きの文字認識とかなら、テンプレートマッチングじゃなくて、
OpenCVのHaar-Like学習で手書き文字を学習させるといいかも。
>>165 ありがとうございます。本屋で見てみます。
>>168 Haar-Like学習ってのは顔の検出アルゴリズムだけじゃなくて文字もイケるんでしょうか。
取りあえずやってみたいと思います。
顔ちぇきってOpenCV使ってるのかな。
シラネ
172 :
デフォルトの名無しさん:2009/06/06(土) 15:57:33
へえすごいんだねOpencv
173 :
デフォルトの名無しさん:2009/06/06(土) 22:48:13
OpenCVを使って顔認証することはできますか?
けっこうググったけど、あまりいい情報見つからず。
174 :
173:2009/06/06(土) 22:54:37
あ
ここでいう認証は登録してある、写真をもとに同一人物であるかどうか
という意味での顔認証です。
見つけるという意味ではないです。
どのような手法を想定しているのかわからんけど
OpenCVに何を期待しているの?
顔認証したいならかなりの部分を自分で実装しないといけないんじゃないかと思うよ
ttp://www.face-rec.org/ このサイトに資料が充実してるよ
176 :
デフォルトの名無しさん:2009/06/07(日) 01:47:20
あ
ライブラリがそろってるわけでは無いのね
池沼レス認証パターンを見つけたよ
一行目に
あ
そして全てage
「顔ちぇき」はまさに顔認証だな。OpenCVを使ってるかどうかは不明だけど。
OpenCVでやりたいなら、認識させたい顔をHaarLike学習させて、その顔ごとに
特徴ファイルを分ければ顔『認識』ができそうだな。
179 :
デフォルトの名無しさん:2009/06/07(日) 05:41:12
でも内容的には今一なんだねOpenCVでやると
だからお前はOpenCVに何を期待してるんだよ
OpenCVは画像処理/認識のライブラリであって
顔認識のライブラリじゃねーよ
181 :
デフォルトの名無しさん:2009/06/07(日) 18:51:20
質問させてください。
Ver1.1で追加?されるMakeScanlinesがうまく動きません。
1つ目の引数のCvMatrix3の型で引っかかっているようなのです。
CvMatrix3でググってみましたがヒットしませんでした。
F行列はCvMat型で、キャストしてみましたがうまくいかず・・・
動かした経験のある方、助言していただけると嬉しいです。
182 :
181:2009/06/07(日) 19:06:17
すみません自己解決しました…
純粋にキャストミスでしたorz スレ汚しすみません;;
顔認識は画像認識の応用だろ
185 :
デフォルトの名無しさん:2009/06/08(月) 00:24:15
だからOpenGLは顔認識だと?
まあ画像処理そのもののおうようでも有るしな
高度なのはダメといわれればそれまでだけど
OpenCVは顔も含めて画像認識を楽にできるようにする「ライブラリ」だろ。
顔認識アルゴリズムを自前で実装するもよし、内蔵のHaarLikeを使うもよし。
>>179は自分で実装もチューニングもやったのか?
OpenCVやり始めたんだけど動画が再生できないんだけどどうすりゃいい?
189 :
デフォルトの名無しさん:2009/06/08(月) 15:06:08
>>188 どの段階で止まるかによる.
たとえば,AVI読み込み失敗ならコーデック不足.
if(name == "デフォルトの名無しさん[] ") && (first_line == "あ\n") ) { ikenuma_flag = 1; }
192 :
デフォルトの名無しさん:2009/06/08(月) 15:44:14
あ
だけでは同一人物だとは限定できないよね
プログラムの基本だよ
>>189のような偽物が出てくると認識率が下がってしまいます。
顔認識でも双子とかそっくりサンがでてきたら駄目でしょうね。
DNA鑑定だって100%はありえないですからね。
数字が並んだテキストファイルをCvMatに読み込ませたいのですが
関数1つではできないのでしょうか?
1 2 3
4 5 6
というテキストがあったら
cvCreateMat(2,3)
と各入れる要素の読み込みまでしたいのです
>>190 ありがとう。ffdshowインストールしたら動画再生されるようになった。取りあえずコーデックを全部いれといた。
次はUSBカメラを買ってきて再生してみる。お勧めのUSBカメラあったら教えてくれ。
197 :
sage:2009/06/08(月) 18:41:32
質問させていただきます。
cvStereoCaribrateを使いたいのですが
引数の設定に悩んでいます
第4引数まで(以下リファレンスよりコピー)
object_points
オブジェクト点の結合行列,3xN あるいは Nx3.ここで, N は全てのビューにおける点数の合計.
image_points1
1 番目のカメラのビューにおける画像間対応点の結合行列, 2xN あるいは Nx2.ここで,N は全てのビューにおける点数の合計.
image_points2
2 番目のカメラのビューにおける画像間対応点の結合行列, 2xN あるいは Nx2.ここで,N は全てのビューにおける点数の合計.
point_counts
各ビューに含まれる点数のベクトル,1xM あるいは Mx1. ここで,M はビューの数.
結合行列という単語で引っかかっているのですが、
それぞれどういった内容の配列を与えればいいか教えてください
OpenCVのキャリブレーションは全方位カメラや魚眼レンズでも使えますか?
やったことはないけど歪み過ぎてチェスボードが検出できないと思う。
Matlabなら魚眼対応ツールあるけど
PS2のUSBカメラが使えるらしいけど他のより性能いいの?使ってる人
Webカメラのスレで聞いてみなよ
>>200 USBカメラの中で最高の性能だよ。
人気で品薄になってるから見かけたら即買ったほうがいい
203 :
200:2009/06/09(火) 01:50:57
>>202 まじっすか。買ってみる。OpenCVで使ったらFPS早くなるかな。
>>198 >>199 いったんラフに極座標変換とかして平面にしてからキャリブレーションすればいいんじゃないか?
>>198 OpenCVはピンホールカメラモデルを仮定してるから,これに従う投影像
ならいい.ということで全方位カメラは無理.
魚眼レンズは画像中心付近はピンホールカメラモデルに近似できない
こともないからなんとかなるかも.中心以外はレンズ歪みを補正しきれ
ないと思う.
matlabの吐く.datファイル(数字が並んだだけのテキストファイル)をOpenCVに読ませる関数はないのでしょうか
207 :
198:2009/06/10(水) 15:49:41
解答してくれた人ありがとう。いろいろ試行錯誤してみる
>>206 OpenCVって16ビットの画像も扱えるんだから、CSVなんか使わないで
画像自体をCSVの代わりに使ったら?
CSVだと横の要素の制限(256?)があるし。
>>208 pythonとか他の言語でも使うこと考えるとcsvが一番便利なんです
210 :
208:2009/06/11(木) 23:53:09
>>209 なるほど。自前で実装するといいよ。
数字だけでいいんだったらfgetsで一行づつ読み込んで
「,」で分けて配列に入れていけばいいじゃん。
>>208 嘘はやめれ。csvに列数の制限など無い
Excelの制限(65536x256)と勘違いしていないか
へぇ
動画ファイルを読み込んで、その動画の強弱に合わせてアーティスティックな映像を
出すなんてことはできますか?メディアプレーヤーの視覚効果みたいなものです。
>>211 Excelに256カラムの制限なんてない。そりゃぁ、かつてはあったかも知らんが。
218 :
213:2009/06/12(金) 14:42:16
いや、どうやったらできるかというか、その指針だけでもみんなに提案してもらおうと。
できるかできないかを聞いてるんじゃなくて。
指針としては、まず動画ファイルを読み込んでみてそれができたら次を考える。
ちなみにメディアプレーヤーの視覚効果の入力は動「画」ではないんじゃね?
指針
其の壱 動画を読み込む。
其の弐 動画の強弱を求める。
其の参 強弱に合わせて映像をアーティスティックに変化させる。
以上
221 :
213:2009/06/12(金) 16:09:22
えーと、その流れだってことは何となく分かってます。大丈夫でエス。
ところで、動画が再生できないんだけど。。。 どうすればいい???
では聞くが、「動画の強弱」とは一体何なのだ。
223 :
213:2009/06/12(金) 16:13:33
なんなんでしょう。やっぱ明るさっすかね?
224 :
213:2009/06/12(金) 16:33:26
これで動画が再生できるはずなんですけどなんかおかしいですか?
Visual C++ Express 2008で作ってます。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
int _tmain(int argc, _TCHAR* argv[])
{
CvCapture* src;
IplImage* frame;
cvNamedWindow("動画");
src = cvCaptureFromFile("動画.avi");
while(1){
frame = cvQueryFrame(src);
cvShowImage("動画", frame);
cvWaitKey(33);
}
cvDestroyWindow("動画");
cvReleaseCapture(&src);
return 0;
}
226 :
213:2009/06/12(金) 16:57:24
すまん。過去ログ
>>189に動画の再生方法書いてあったぜ。
ffdshowってのでコーデックを入れればよかったんだな。
動画は再生できた。ただ
>>225がいうように無限ループになる。
あとは動画の強弱の取り出し方だが、何かよい方法を提案してくれ。
>>226 強弱ってのが何の強弱を意味するのかわからんが、画素値の平均とか標準偏差ならcvAvgとかcvAvgSdvとかでいいんじゃない?
提案ねー。ピンボケしてたら弱い、クッキリしてたら強いってのはどう?
色の変化が大きければ強くて変化が小さければ弱いってことでどうだろう。
230 :
213:2009/06/12(金) 17:43:01
>>227 平均値を出してみた。いい感じで動画の明るさに応じて変化しているようだ。
で?っていう。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
int _tmain(int argc, _TCHAR* argv[])
{
CvCapture* src;
IplImage* frame;
cvNamedWindow("動画");
src = cvCaptureFromFile("動画.avi");
while(1){
frame = cvQueryFrame(src);
printf("平均値は%fだ。\n", cvAvg(frame));
cvShowImage("動画", frame);
cvWaitKey(33);
}
cvDestroyWindow("動画");
cvReleaseCapture(&src);
return 0;
}
232 :
213:2009/06/12(金) 17:54:15
でもどうやったら。ちょっと調べてくる。
213の口調はともかく
行動力に好感
癒し系だな
236 :
デフォルトの名無しさん:2009/06/14(日) 21:41:59
あるノートパソコンでOpenCVをインストールしてサンプルプログラムを
実行したりしたんですけど、整数型しか使わないサンプルは動くんですが
小数型を使うプログラムは動かないみたいです。同じような症状が出た人
いますか?解決法があれば教えてください。
「あるノートパソコン」以外では正常に動くのかね?
238 :
236:2009/06/15(月) 00:52:21
>>237 はい、デスクトップPCでは動きます。ちなみに動かないのはミニノートPCです。
多分、グラフィックボードが対応してないとかなんでしょうかね?
グラフィックボードに依存した「サンプルプログラム」なのか?
少数型(浮動小数点?)の演算にグラフィックボードが依存するってgpgpuの事かね
環境や症状を人にわかるように説明出来なければヒントすら得られないと思うぜ
入ってるOpenCVのバージョンが違うに一票
241 :
236:2009/06/15(月) 12:19:36
デスクトップ、ミニノートPCとも、XPのSP3にOpenCV1.1preをインストールした直後の状態です。
普通、サンプルプログラム(例えばDFTサンプルのdft.exe)なんか普通に実行できるはずなのに、
できないんです(デスクトップでは普通に実行できる)。
原因となっている関数を特定する為に、ソースコードを1つづつ削ったりしながら
ビルド&実行してみると、どうやら小数型の関数で引っかかっているみたいなんです。
最悪、OSの再インストールからやってみるべきかとも思っています。
そもそも、「小数型の関数」なんてものはないだろ。
説明が下手なんだから、ソースを晒せよ。
243 :
236:2009/06/15(月) 13:04:55
下のソースのcvCreateImageの一行目で小数型(IPL_DEPTH_16S)のIplImage変数を
準備してるところでエラー発生。
#include <cv.h>
#include <highgui.h>
int main (int argc, char **argv)
{
IplImage *src_img, *dst_img, *tmp_img;
// 画像の読み込み
if (argc != 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
tmp_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_16S, 1);
dst_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);
cvSobel (src_img, tmp_img, 1, 0); // Sobelフィルタ
cvNamedWindow ("Sobel", CV_WINDOW_AUTOSIZE);
cvShowImage ("Sobel", dst_img);
cvWaitKey (0);
cvDestroyWindow ("Sobel");
cvReleaseImage (&src_img); cvReleaseImage (&dst_img); cvReleaseImage (&tmp_img);
return 0;
}
244 :
236:2009/06/15(月) 13:08:41
上のソースは、張り付け間違えました。
下のソースのcvCreateImageで小数型(IPL_DEPTH_16S)のIplImage変数を
準備してるところでエラー発生。
#include <cv.h>
#include <highgui.h>
int main (int argc, char **argv)
{
IplImage *src_img, *dst_img;
// 画像の読み込み
if (argc != 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
dst_img = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_16S, 1);
cvSobel (src_img, dst_img, 1, 0); // Sobelフィルタ
cvNamedWindow ("Sobel", CV_WINDOW_AUTOSIZE);
cvShowImage ("Sobel", dst_img);
cvWaitKey (0);
cvDestroyWindow ("Sobel");
cvReleaseImage (&src_img); cvReleaseImage (&dst_img);
return 0;
}
説明が下手な馬鹿でどうしようもないんだから、エラーメッセージくらい貼れよ。
なんだよ、準備って。俺語なんか作ってんじゃねぇって。
いつからIPL_DEPTH_16S を少数型って言うようになったんだ?
お頭が硬いのかな?俺語くらい受け入れられなきゃだめだぞ。
>>247 つたわんないだろ。IPL_DEPTH_16Sは符号有り 16 ビット「整数」
IPL_DEPTH_16Sは符号付き16bit整数ね
252 :
236:2009/06/15(月) 16:14:22
あ
間違い、IPL_DEPTH_16Sじゃなく単精度浮動小数点数IPL_DEPTH_32Fを
使ったときにエラーが出るんだ。さっきのソースは適当に組んだもんで
実際には実行可能。
兎に角、ソースが悪いのではなくOpenCVとミニノートの相性が悪いみたい。
エラーメッセージは今そのPCが手元に無いので貼れず。
うまく動けばモバイルでOpenCVを使っていろいろできそう。
さあ、どうしたらよいのでしょうか。
死ね。悪いことは言わん。それが身のためだ。
メモリが足りない
>>253 死ね。悪いことは言わん。それが身のためだ。
おい、
>>253はストレス溜まってるから放置しとけ。決して構うな。
相手にしたら負け。放置が基本。
OpenCVで回転補正有りのパターンマッチングってできますか??
>>258 テンプレートマッチングのテンプレートを回転させる方法もあるけどめちゃくちゃ遅い。
Haar-Like特徴分類の機械学習でやれば、実時間で検出可能。
>>259 Haar-Like特徴分類手法はかなり学習が必要と
本に書いていました。
マスター画像1回の取り込みで、回転パターンマッチングが
やりたいのですが・・・。
特徴点自動抽出のGoodFeaturesToTrack()とかでできるのかな??
>>260 こういうのはどう?
1、GoodFeaturesToTrack()で、探し先画像と探す画像の特徴点を自動抽出しとく。
2、探す画像の特徴点の分布と同じ物を、探し先の特徴点の分布から探す。
こうすれば、画像の画素全体を走査しなくていいから早いかもよ!
HaarLikeはかなりロバストで高速なんだがな。
SURFでいいじゃん
最近、微分値(明るさの変化)だったかを特徴に用いて検出するって方法が出てなかったか?
>>261 ありがとうございます、ソフト作ってやってみます。
>>262 「登録は一発で」という要望が多いもので・・・。
>>263 おおお、ソフト作ってみます。
>>264 エッジ画像で高速回転パターンマッチングする機能を
画像処理機でよく見かけますが、探しているのは
まさににその手の機能です・・・。
いわゆる正規化相関マッチングとか、幾何学相関マッチングではないから
「登録はイッパツ」が欲しければ、ライブラリを買うしかないんじゃないのかな
「登録は一発」のソフトを誰か作ってよ。OpenCV使えばできそうじゃん。
要するにHaarLikeのGUI版か。それはいいな。そんなに高くなければ欲しいかも。
>>269 HaarLike学習は学習用の画像(検出画像が含まれない非正解画像)が沢山必要
だから「一発」じゃ無理だろ。
>>260は「マスタ画像の取り込み1回」で
検出先画像から検出させたいっつってんだから。
ただHaarLikeは「任意の」背景も含めて学習させるからロバストではあるわな。
271 :
265:2009/06/16(火) 22:34:48
SURFで回転パターンマッチングやってみまようとしましたが、
cvExtractSURF()を実行するのに640x480x8bitのモノクロ画像で
Core2 Quad Q6600 2.4GHz, mem 2GBで
350msecもかかるんですね・・・。
これでは、いまいち実用的でないです・・・。
テンプレートは150x150pixelくらいとして、20〜50msecで
回転パターンマッチングはできないものかなぁ・・・。
>>271 どういう背景中のどういう物体を検出しようとしてんの?
273 :
271:2009/06/17(水) 00:12:49
>>272 印刷図柄中のある部分を切り出したいんです。
印刷図柄とは、スーパーの広告のチラシの様な少々派手目の特徴ある図柄です。
この図柄はどっちを向いているか(回転方向に)わからないのですが、
これをまっすぐ(チラシが読める向き)にして、
その中の特定のエリアを切り出したいのですが・・・。
こういう要求は、画像処理の前処理として非常に多いんです。
検出先がチラシの様な図柄って分かってるんだったら、まず検出先の傾き補正を
すれば、テンプレートは垂直1つでいいんじゃないか?
>>273 最初の「OpenCVで」という条件を外せば楽勝だと思うのだが
外すのは無理なのか
277 :
デフォルトの名無しさん:2009/06/17(水) 17:39:37
open cvで画像を20度ずつ回転させるプログラムを作りたいんですが
回転サンプルプログラムにfor文をどう組み込めばできますか.教えてください.
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main(int argc, char **argv){
IplImage *img = 0, *img2 = 0;
CvMat* rotationMat = 0;
bool isStop = false;
int waitKey;
int rotate = 0;
img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR);
img2 = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
while (1){
if (!isStop){
rotationMat = cvCreateMat(2, 3, CV_32FC1);
cv2DRotationMatrix(cvPoint2D32f(img->height / 2, img->width / 2), rotate, 1, rotationMat);
cvWarpAffine(img, img2, rotationMat);
rotate += 20;
if(rotate == 360){
rotate = 0;
}
cvShowImage("Image", img2);
}
waitKey = cvWaitKey(33);
if (waitKey == 'q'){
break;
}
}
cvDestroyWindow("Image");
cvReleaseImage(&img);
return 0;
}
あ、ちょっと変なところがあるな
でもだいたいこんな感じじゃない?
280 :
デフォルトの名無しさん:2009/06/17(水) 18:50:28
助かりました
どうもありがとうございます.
画像の読み込みは何行目なんですか?
うん、これでいいな。
ただ
rotationMat = cvCreateMat(2, 3, CV_32FC1);
はwhileの中じゃなくてwhileの上の方で最初に実行した方がいいな。
毎回実行する必要はないから。
画像の読み込みは下の行。
img = cvLoadImage(argv[1], CV_LOAD_IMAGE_COLOR);
もしかして、Visual C++のコンソールアプリとかで作ってる?
これは純粋なコンソールCコンパイラ用のコードだから。
283 :
デフォルトの名無しさん:2009/06/17(水) 18:59:19
ありがとうございます
Visual C++です
Visual C++では形式がちがいますか?
初心者なもんですみません.
Visual C++ではこれでいける。
>>278のをちょっと変えただけだけど。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
int _tmain(int argc, _TCHAR* argv[])
{
IplImage *img = 0, *img2 = 0;
CvMat* rotationMat = 0;
bool isStop = false;
int waitKey, rotate = 0;
img = cvLoadImage("画像.jpg");
img2 = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 3);
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);
rotationMat = cvCreateMat(2, 3, CV_32FC1);
while (1){
cv2DRotationMatrix(cvPoint2D32f(img->height / 2, img->width / 2), rotate, 1, rotationMat);
cvWarpAffine(img, img2, rotationMat);
rotate += 20;
if(rotate == 360){ rotate = 0; }
cvShowImage("Image", img2);
waitKey = cvWaitKey(33);
if (waitKey == 'q') break;
}
cvDestroyWindow("Image");
cvReleaseImage(&img);
return 0;
}
全然関係ないけど
if (rotate >= 360) { rotate -= 360; }
もしくは
rotate = (rotate + 20 ) % 360;
にしたほうが、仕様変更で20が50になったときにやさしい
おまいらやさしいな
このスレってプログラミングは教えてくれるがOpenCVの実装内容とかCV系の話になるとサッパリだな
画像処理スレも論文の話とか全然出ないし。しても盛り上がらないし。
独り言でいいからそういう話やってみて。
おれもそれやろうとしてエラーになったんであきらめた。
x64マシンで24Gバイト積む
ソースコードを書き換える
エラーが起こる直前で学習をストップさせる。
>>289 そのときのコマンドラインは?
まさか、-w,-hに大きな値を指定したりしてないよな
-w 180 -h 180 くらいでやってたんですが、
-w 40 -h 40で通りました。(まだ計算中ですが・・・)
OpenCVでゲームって作れる?
人間と相互作用するようなゲーム。任天堂Wiiリモコンみたいな感じで、
でもリモコンはつかわずにUSBカメラとかからの入力映像をもとに操作する。
〜作れる?
って質問する人はなんなんだ
作れるかどうかは自分次第
どんなライブラリを使おうと、結局は自分で実装しなけりゃいけないところがあるんだぜ
アイデア次第
画像の配列が
double float int char
どの型になってても動くforループ(eachpixel)は
for (j = 1; j < m->cols; j++) {tmp=cvGetReal2D(m,i,j);
}
のように書くしかないのでしょうか?
処理が遅すぎで困っています
>>301 ucharなことが最初からわかってれば問題ないのですが
floatなどもくることがあるのです
?聞きたいことがよくわかんないよ?
処理が遅いのをどうにかしたいならまず
>>301だし。
cvGetReal2Dってのは常にdoubleを返すんでしょ?
もともとの配列がucharかfloatかわからないって話か。
それなら、最初の30要素くらいをdoubleで読み込んで調べて、
全部正&ひとつも小数点以下がなければucharとか。
ちなみに、cvGetReal2DとかcvmGetとか使ってる限りはどう工夫してもかなり遅いよ。
やっぱポインタ直アクセスをしないと。
IplImage型使ってるならdepth参照して処理すればいいんじゃね
depth参照でforで使う変数の型が切り替わるのが一番ということか
そんなマクロあったらいいのに
実践OpenCVってどうなの?
ちょっと見てみようと思って本屋見て回ったんだが、どこにもなかったんだ
>>307 宣伝乙
目次を見る限り初学者向けっぽいの.
OpenCVの特長の利用方法が書いているから良さそう.
OpenCV初心者です。
WinXP SP3 + VS2005 + DirectShowでビデオキャプチャしてます。
while(1) {
....
int key = cvWaitKey(33);
printf("%d", key);
}
としたときにずっとkeyが-1だ、と返されてしまうんですが
こんな現象に出くわした方いらっしゃいませんか?
>>309 手持ちのOpenCV1.1ソースで,otherlibs/highgui/window_w32.cpp に記述あり.1128行目から.
-1 は次のコード部分.
if( (delay > 0 && abs((int)(GetTickCount() - time0)) >= delay) || hg_windows == 0 )
return -1;
省略部分でウインドウ出していないなら.hg_windows == 0 に引っかかってる.
311 :
309:2009/06/22(月) 11:25:27
>>310 ありがとうございます。
省略部分ではcvShowImageでウインドウを出しているので、
前半部分かと思いますが、この条件で引っかかる気がしないので困惑です。
どう見ても前半の条件を満たしているようだが
それよりも、何故に33ms?
313 :
309:2009/06/22(月) 13:44:58
>>312 あ、いえ特に深い意味はありません。
最初は1だったのですが、ウエイト時間が短いのかもしれないということで
いろいろ試した名残です。
314 :
デフォルトの名無しさん:2009/06/22(月) 14:50:19
キャリブレーションに関して質問です。
キャリブレーション用のチェスボードシートをCAD上で描いて
レーザープリンタで出力させているのですが,
全体で1〜2mmほど寸法ずれがあります。
レーザープリンタでは,その特性上起こりうる誤差と聞いてますが
チェスボードシートの誤差はどの程度まで許容できるのでしょうか?
回答よろしくお願いします。
315 :
314:2009/06/22(月) 14:55:32
sageで進んでたんですね。
上げてしまいスイマセン。
>>313 特に意味が無いなら0の方が確実にkeyの値わかるからよくね?
>>314 三次元計測をしている知り合いは出入りの印刷屋をいじめぬいて作るらしい。
定規で分かるような誤差があれば差し戻し。
318 :
314:2009/06/22(月) 18:26:48
>>317 情報ありがとうございます。
やはり精度がいる計測には,精度の良いシートが必要なんですね。
シートやマスの大きさにもよるんでしょうけど
全体の精度が0.1mm以下ってことでしょうね。
すいません、OpenCV初心者なのですが
OpenCV1.0、VisualStudio2005の環境で
SVMに挑戦しようと思い、リファレンスにあるSVMのサンプルソースを
動かそうとしたところ、ml.hの75行目の CvVectors* next;
の箇所でerror C2061 :構文エラー:識別子'CvVectors'
が出てしまうのですが、プロジェクトやVisualStudio2005の設定に
問題があるのでしょうか・・・
Opencv.slnをリビルドしてみても、OpenCVをインストールし直した直後でも
同じエラーがでます。
cv.lib
cvaux.lib
cxcore.lib
highgui.lib
cvcam.lib
ml.lib
を一通りlibをリンカさせても出てくるのですが、
原因としてはどんなものが考えられるでしょうか?
構文エラーくらい自分で直せよ
そんなにSVMには詳しくないんだけど、OpenCVのSVMの実装はあんまり評判がよろしくないから
libSVMあたりを使ったほうがいいんじゃないかな
1.1からはインタフェースだけ合わせたlivsvmになってる
いいかげん mlのboostingと顔認識のboostingを統合してほしい
cvcam.libはリンクさせる必要ないぞ。
325 :
324:2009/07/03(金) 15:06:13
1.0使ってるのか、じゃcvcamもいるわ。でもなぜ1.0?
326 :
デフォルトの名無しさん:2009/07/03(金) 17:36:44
画像の角度を変えながら一回一回マッチングしたいのですが、
画像回転とテンプレートマッチングを一つのプログラムにすることは可能でしょうか。
回転した画像をIplImageに入れて、それぞれについてマッチングすればいいよ。
例えば45度ずつ回転した8つの画像をテンプレートにして8回ループで
マッチングすればいい。
328 :
デフォルトの名無しさん:2009/07/03(金) 18:43:35
ありがとうございます。
何度ずつ回転するプログラムを作って
for文とかのループにテンプレートマッチングのプログラムを組み込むってことですか?
まだOPENCVをはじめて日が浅いもので。。
できるよ
まあそういうことだよ。
IplImage* image[8];
for(i = 0; i < 8; i++){
image[i] = cvCreateImage(〜);
}
みたいにして8個分のテンプレート用の画像領域を作成して、
そこに回転したテンプレートを入れてく。
それでそれぞれのマッチング値を計算すればいいさ。
331 :
デフォルトの名無しさん:2009/07/03(金) 21:31:09
今テンプレートマッチングのプログラムと合わせてるのですが
//画像を生成する
(5つの宣言)
//BGRからグレースケールに変換
//グレースケールから2値に変換
//テンプレートマッチングを行う
プログラムをどのように入れたら上手くいきますか?
まずテンプレート1つだけのときはうまくいってるんだよね?
そしたらそれをforで回せばいいだけじゃん。
>>331 組み合わせ方
1、画像を宣言
2、画像を例えば20度ずつ回転しIplImageに入れる
3、各テンプレートについてテンプレートマッチング
>>331 もうこうなったら、全部ソースを載せたらいいと思うYO!
>>331 20度づつ回転させた18テンプレートを使用するとする。
#include <cv.h>
#include <highgui.h>
int
main (int argc, char **argv)
{
//各種宣言
//画像を生成する
IplImage* image[18];
//テンプレートの元画像を読み込む
for(i = 0; i < 18; i++){
image[i] = cvCreateImage(〜);
//テンプレートを20度回転
//テンプレートをimage[i]に入れる
}
//ソース画像の読み込み
//ソース画像をBGRからグレースケールに変換
//グレースケールから2値に変換
for(j = 0; j < 18; j++){
//テンプレートマッチング
cvMatchTemplate(src_img, image[j], dst_img, CV_TM_CCOEFF_NORMED);
//画像表示など
}
//終了処理
}
動画像処理で入力画像をHSV形式に変換して処理をしているの
ですが全体的に処理速度が遅い。。。
プログラム内部で途中経過を表示するため画像のコピーをいくつかとって
別ウィンドウに表示しているのが原因の一つかなと思っています。
それで、容量を減らすためたにHSVの3プレーンをHSだけの2プレーンにして
処理を行ったのですが、どうもcvSplitとcvMergeでの処理の方が
圧倒的に時間がかかっているようでHSVの3つを使うより処理速度が
遅くなってしまいました。
cvCvtColor(inputImage, hsvImage, CV_BGR2HSV);
cvSplit(hsvImage, hueImage, saturationImage, valueImage, NULL);
cvMerge(hueImage, saturationImage, NULL, NULL, hsImage);
もしかして、3プレーンから2プレーンだけを取り出す効率的な方法が
あったりするのでしょうか。
COI(Channel of Interest)を使えばできるぜ
でもCOIはややこしいからパソコンを早いのに変えるのがおすすめ。
あと、途中経過を複数ウィンドウで表示させるのは速度にかなり影響する。
339 :
336:2009/07/06(月) 02:16:44
>>337 >>338 ありがとうございます。COIについて調べてみました。
http://opencv.jp/opencv-1.0.0/document/opencvref_cxcore_init.html のsetImageCOIを見ますと、
OpenCV の関数の多くは COI をサポートしていないことに注意すること.
別々の画像/行列チャンネルを処理するには,(cvCopy や cvSplit によって)
別々の画像/行列へチャンネルをコピーし,それを処理してから,必要ならば
その結果を(cvCopy や cvCvtPlaneToPix によって)もう一度コピーし直して返す.
と書かれています。
まだ試していないのですが、「OpenCV の関数の多くは COI をサポートしていないことに注意すること.」
が気になるのと、336の処理は
cvSetImageCOI( hsvImg, 1 );
cvCopy(hsvImage, hueImage);
cvSetImageCOI( hsvImg, 2 );
cvCopy(hsvImage, saturationImage);
cvSetImageCOI( hsvImg, 0 ); // COIを解除
cvMerge(hueImage, saturationImage, NULL, NULL, hsImage);
という風に書きなおすことになるのでよいのかということが
気になります。
COIを使うならそれでいいと思うよ。COIに対応した関数は少ないから
3チャンネルから1チャンネルにコピー。でもcvSplitより速くなるかは不明。
cvSplitとcvMergeで遅くなってるってほんと?
結局はそれらだって内部でCOI使ってコピーしてるとかじゃないのかな。
OpenCVって録音ってできませんか?
Webカメラキャプチャするときに音声も録音できたらいいんですが
できねえよ
では音は別取りで後で合成するのが普通ですか?
カメラから録画してマイクから録音するのが普通です
345 :
デフォルトの名無しさん:2009/07/07(火) 15:19:50
OpenCVってmingwでも使えますか
MotionJPEGのCODECはちゃんとインストールしてあるのか?
最近使い始めたんですが、画素値はどのようにして参照すればよいのでしょうか?
OpenCVってPythonでも使えますか
VB6.0で使えます?
使えます。
pythonで使ってみた
うちのpythonは2.5だったのに
OpenCV1.1pre1aを入れたらpython2.6用で使えずorz
OpenCV1.0を入れ直してうまくいったので快適
Pythonで使うと画素へのアクセスとか、低レベルなことがやりにくかった気がする
2.0ではそこら辺が充実してるといいな
たぶん概出なんだろうけど自動顔認識やってみた
ちょっとでも傾いてると全然だめ
浅く帽子かぶっててもだめ
逆に心霊写真っぽい画像でも顔認識される
学習させないとだめぢゃ
359 :
デフォルトの名無しさん:2009/07/13(月) 05:03:32
動画用だから正面だけ検出できればいいんだよ
>>360 正しい顔と正しくない顔(グロテスクとか違和感とか)の判別って主観じゃないのかな
一つ一つは主観でも多数の意見を平均化すれば客観になるだろ。
たしかに何でその猿グロいんだろうと思って本文読んで納得
顔に見えるけど微妙に顔とは違っているというのに恐怖を感じる
パノラマ画像を作るにはどうしたらいいんや?
ヒントをクリリン。
円筒の内側に投影するイメージで作れば宜しいかと。
2枚のずらした画像があったとしたら、片方の画像のつなげたいところの端っこの
画像をテンプレートにして、もう片方の画像中からテンプレートマッチングする。
検出された点の座標で2枚の画像をつなげればOK。
2枚の画像の端っこをお互いに徐々にぼかすようにして
合成すればもっと自然につなげる。
370 :
デフォルトの名無しさん:2009/07/16(木) 04:27:15
ACTIVE SILICON PHOENIXというフレームグラバーに浜松ホトニクスのC9100‐13というカメラをつないで読み出したいんだけどどうしたらいい?
そのフレームグラバーとやらで取得した画素配列をOpenCVのIplImage形式に逐次変換すればOK
アドバイスをもらえると助かります。
今まで趣味でWeb関係のプログラムをやっていたいのですが、
今度仕事でとある専門領域の画像認識をすることになりました。
最近は、pythonを使っていたので
OpenCV1.0 + python 2.5で良いかなと思っていたのですが、
C++ほどのパフォーマンスは出ないと予想されるので、
どうしようか悩んでいます。
扱う画像で変わってくると思うので、
一概には言えないと思ういますが、
OpenCV+pythonでスピードが問題になった経験がおありの方はいるでしょうか?
機能をまるっと使う場合は問題ないが
ピクセル単位でアクセスするような処理を書くと当然100倍以上遅い
ピクセル単位でアクセスする予定があるので、
pythonを使うかどうか十分検討したいと思います。
ありがとうございました。
Ver1.0とVer1.1preってどこが違うの?
376 :
デフォルトの名無しさん:2009/07/23(木) 18:30:42
目の瞳孔の部分を検出して、目が動くとその瞳孔部分を追いかけるようなプログラムをc++で書きたいと思っています。
ネットを検索してもサンプルを見つけることができませんでした。
どのようなプログラムにすればいいのでしょうか
377 :
デフォルトの名無しさん:2009/07/23(木) 21:40:17
eye trackingで検索すれば、いろいろ論文があると思う。
コードまで公開しているものは少ないだろう。
378 :
デフォルトの名無しさん:2009/07/24(金) 03:21:57
>376
瞳孔を調べるって事は、画像の中で一番くらい部分をおうようなプログラムにすればいいはず。
色をグレースケールに変更して、そのなかで一番くらい部分を検知してその真ん中を
中心としてその部分を追えばいいはず
サンプルの書き方はわからないので、だれか書いてあげて
髪が真っ先に引っかかるな
>>376 カメラの撮影圏内に目しかないのなら,瞳孔の色の物体の重心を測定すればいいんじゃね
サンプルコードはOpenCV プログラミングブックに載っていた気がした.
目を検出するための訓練された検出器はeye detection opencvなどのキーワードで探せばインターネットにあるよ。
まず顔の位置と範囲を検出してその中で目の位置を検出する。
目の検出は精度が悪いので顔の半分より上にあるなど条件を絞って誤検出を消す。
あとは瞳を検出して次のフレームからトラッキングする。
目を検出したあとは虹彩認証と同じだから
http://cnx.org/content/m12487/latest/ が参考になる。
OpenCVでカメラリンクのカメラからもキャプチャできるのでしょうか?
ok
384 :
_:2009/07/25(土) 04:28:56
自分でオブジェクト検出器を作ろうと思ってまして、
学習用の画像をとりあえず何千枚か用意しました。
正解画像の場合は、リストファイルの中に対象オブジェクトの
画像内での座標、横幅、高さを入力する必要がありますが、
これを効率よくやるツールってないのでしょうか?
私が今思いつくのは、windowsに標準で入ってるペイントを使う
方法だけです。
"選択"を使用してオブジェクトが含まれる領域を囲むと
その部分の座標と横幅と高さが右下の方に表示されますが、
これを逐次記録していくのが非常にめんどくさいです。
なんかいい方法あれば教えていただけると助かります。
OpenCVで
386 :
デフォルトの名無しさん:2009/07/25(土) 06:50:51
それってcreatesampleツールが自動でやってくれるぞ?
387 :
386:2009/07/25(土) 06:55:37
そっか正解画像が毎回違う場合か。
>>385の言うようにOpenCVでそれ専用に作ったらいいかも。
マウスで取得して座標値を保存してくプログラム。
何を検出させようとしているの??
質問があります。
複数のカメラのindexを知りたいときってどうすれば良いでしょうか?
今は、cvCreateCameraCapture( 1 )
1,2,3と順番に確認してるのですが、面倒だと感じています。
こんな感じでどう?
int* index;
int nselected = cvcamSelectCamera(&index);
int cam1 = index[0];
int cam2 = index[1];
int cam3 = index[2];
391 :
389:2009/07/27(月) 22:19:00
2.0って何時発表されるんだっけ?
cvHaarDetectObjects()に関してお聞きします。
この関数の第4引数のscale_factorは,第7引数のmin_sizeで設定された
ウィンドウサイズを変えるものと考えてよろしいのでしょうか。
例えば
scale_factor = 1.2,min_size = (20,20)のとき
ウィンドウサイズは(24,24)となります。
ただ上記の設定で静止画に対し顔検出を行なった場合に,
様々な大きさの顔が検出されるのですが,なぜでしょうか。
>>393 scale_factorは探索サイズを何倍ずつ大きくするかっていうもの
>>394 ありがとうございます。
あと1点追加で質問があります。
探索サイズはどこまで大きくなるんでしょうか。
>>396 わかりました。ありがとうございます。
うやむや感が取れました。
質問です。ちょっとまえに「中国政府が検閲ソフトにOpenCVを
著作権表示なしに勝手に使ったのでライセンス違反だ」
みたいなニュースを読んだんですが、知ってる人いますか?
OpenCVの条文読んだんですが、これって宣伝条項のない修正BSD
ライセンスですよね? 何が問題だったんでしょうか?
あの毛沢東画像とポルノ画像の区別もできないやつか
400 :
デフォルトの名無しさん:2009/08/05(水) 20:41:09
IplImageのImageData配列の中の輝度値をいじってます。
んで、画像をRGBで読んで輝度値に対して色々な色空間に変換する関数を実装してるんですが、
double ReH(double B,double G,double R){
double reH = 0;
reH = acos( (R-G)+(R-B) / ( 2 * sqrt( pow( (R-G), 2 ) + (R-B) * (G-B) ) ) );
if(G < B){
reH = 2 * M_PI - reH;
}
return reH;
}
上のような修正HSVのHを拾ってくる関数を作ってみたんですが、これ、返値を参照する時のフォーマットは何なんでしょうか。
%fでも%cでもエラーが出て、えらいこっちゃになってます。もともとchar型の配列だからそもそも無謀なんでしょうか。
画素値は unsigned char 扱いで,区間 [0, 255] ですぞ.double へキャストしているのでしょうか?
%f %c のくだりは分かりません.
はい、doubleへキャストして渡しています。
色空間変更後(関数で画素値いじり後)の画像はきちんと表示されるのにいじった画素値を直接参照しようとすると見えないんです。
うーむ・・・
%f%cはCでの出力の際のフォーマット指定子です。
404 :
デフォルトの名無しさん:2009/08/09(日) 01:37:32
>>403 ReHを使ってる所、doubleにキャストしてるところ、またcharに戻してる所、
%fでエラーが出るところのソースを出さないと答えは得られないんじゃね
レス有難うございます。
img = cvLoadImage("test.jpg",3);
img6 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,3);
char p[3];
for(int r1 = 0; r1 < img->height; r1++){
for(int r2 = 0; r2 < img->width; r2++){
p[0] = img->imageData[img->widthStep * r1 + r2 * 3];
p[1] = img->imageData[img->widthStep * r1 + r2 * 3 + 1];
p[2] = img->imageData[img->widthStep * r1 + r2 * 3 + 2];
img6->imageData[img6->widthStep * r1 + r2 * 3] = ReH((double)p[0],(double)p[1],(double)p[2]);
img6->imageData[img6->widthStep * r1 + r2 * 3 + 1] = ReS((double)p[0],(double)p[1],(double)p[2]);
img6->imageData[img6->widthStep * r1 + r2 * 3 + 2] = ReV((double)p[0],(double)p[1],(double)p[2]);
}
}
としています。
ReHは
>>401の通りです。
また、
double testparam = ReH(240.0,227.0,213.0);
printf("\n%f",testparam);
としても見えません。
>>406 r1が3倍されていないのはさておき、「見えません」では言いたいことが判らない。
まさかとは思うが、改行後に出力しているから(文字通り)見えていないなんてことはないよな。
# 普通は改行文字を後にするもんだからねぇ。
それと、%fより%gをお勧め。
408 :
デフォルトの名無しさん:2009/08/09(日) 11:56:45
画像から一部分を切り取ってそれをIplImageに格納したいのですが
どうすればいいのですか?
見えないのは
>>407のとおり\nを最後に書けばでてくるような。(r1は今のままでokのような
>>406 Rehは色々計算してるけど、戻り値は0〜2πの範囲で返すようだが、それをcharに直すと0-6?
常にほとんど真っ黒なんだけどいいのか?
>>407 3倍ってさ,width のカウンタになってる r2 だけでいいんじゃないの?
>>408 一部分を ROI に指定して,ROI 情報を基に cvCreateImage して cvCopy したらいいんじゃね?
試していないけど.
411 :
406:2009/08/09(日) 13:20:55
>>407 すみません、説明不足でした。
見えないというのは、常に出力時に-1#INDと表示されるのです。
変数の表示自体は出来ています。
%gは知りませんでした。使ってみます。ありがとうございます。
>>409 レス有難うございます。
ただ、実際に変換後のImageData配列を持ったIplImageを表示してみると真っ黒ではなくきちんと画像が表示されるんですよね・・・
うーむ・・・
>3倍
いや、いいならいいんだ。
>H
Hueを戻しているんだからそこはいいと思うのだが、imageDataの型が判らんな。少なくとも、charに変換しちゃ意味がない。
413 :
406:2009/08/09(日) 13:42:47
imageDataは、IplImage内で宣言されているchar型配列を持ったメンバですよね?
ReHでdouble型を無理やりねじ込んでいるのがまずいのでしょうか。
ただ画像表示は出来るのに、輝度値表示は出来ないので、そこが謎なんです。
414 :
デフォルトの名無しさん:2009/08/09(日) 17:25:09
>>401 == 406
カッコが足りないだけだと思う。
acos の中の (R-G)+(R-B) / 分母
を
((R-G)+(R-B)) / 分母
に。
416 :
406:2009/08/09(日) 19:08:39
うわあああああああ
ほんとだああああ
ありがとうございます・・・助かりました・・・
他のレス下さった方もありがとうございました!
USBカメラで麻雀牌を撮影すると、点数を計算してくれるって言うのつくれないかな?
お前が書き込んだせいで事業化する奴が出てくるだろう
420 :
デフォルトの名無しさん:2009/08/10(月) 19:46:24
カメラが5台必要だし、一台は高感度で卓がとれるようにしなきゃいけないし、設定や操作も面倒だし
いや、携帯カメラでやるための布石。
一番右にツモったまたはロンした牌をおいて、
あとはいくつか選択肢に答えるだけ。(ロンあがり、ハイテイ、ドラある?など)
とにかくまずは画像で牌を認識できるかなんだ。
すべての牌にユビキタスチップ埋め込んだ方が早いな
ICタグを全ての牌に埋め込み卓自体がリーダ
OpenCV関係ないなそれ
画像処理スレに訊いたらまともな回答来なかったのでこっちで訊いてしまうんですが、
Kruppaの方程式について解説した日本語の本ってありませんか?
初心者質問で申し訳ないのです、
天井についているカメラから絵を描いている動画を撮影し、opencvで紙だけを検出したいのですがいまいち上手くいきません。
今のところ、
動画から画像を抜き出す
ROIで範囲指定(紙の角から100pixelほどを指定)
指定範囲内で特徴点検出(角を検出)
で上手く角を検出できていたのですが、角の三点以上が手などの障害物で隠れた状態で紙を動かされるとどうにも対応できません。
(隠された状態で動いているため、特徴点を追いかけてくれない)
※二点までが隠れずに動いたなら、その二点から隠れた二点を割り出すことができます。
そこでパターンマッチングで何かできないかと調べているのですが、いまいち上手くいきそうなものがありません。
比較的敷居も低く、成功しやすそうなのがテンプレートマッチングなのですが、画像が回転しまうと対応できませんし、
何かいい方法はありませんでしょうか?
※紙は最初真っ白なので特徴点が角くらいしかなく特徴点で検出するのは無理そうです。
>>427 1つの方法だけで完結させようとしないで、複数の方法を併用した方がいいかと。
cvCaptureFromAVI()で約1.4GBの動画ファイルを読み込んで,
cvQueryFrame()をループでラストフレームまでまわしてます.
総フレーム数330000として,なぜか約225000フレーム目あたりでプログラムが自然と終了してしまいます.
ループ中に自作した処理にバグでもあってその約225000回目のループでメモリを食いきったのかと思って,
ループ開始フレームを220000フレームあたりに設定してもやはり225000フレーム目でプログラムが終了してしまいます.
VCのデバッグモードで実行しても実行停止してもバグ箇所の指摘をせずに勝手にプログラムが終了してしまいます.
原因はなんでしょうか?
環境winXPsp3 VC++2008Express OpenCV1.0およびOpenCV1.1です
別の動画でやってみるとか、自作の処理抜きでやってみるとか
他にやることあるだろうが・・・。
その225000フレーム辺りにエラーがあるんじゃないの?
>>429で言及している特定の動画ファイルでのみ止まるのか、
それとも、どんな動画ファイルでも225000フレーム付近を超えると必ず止まるのか、
そこのところをはっきりしてほしい。
433 :
429:2009/08/18(火) 22:37:21
ためしたファイルは2つ,両方とも1G台のもので元は10G以上のmpeg2動画だったのを圧縮したもの.
両方とも同じ方法で圧縮(SUPER Cにて)したのでもしかしたら動画に原因があるかもしれない.
それと説明不足でしたが一度ループ中の処理を全て消して,
cvQueryFrame()とcvSetCaptureProperty()のみにした上でも結果は同じでした.
終了直前のループでとめて、変数とかスタックとかを見れば?
ソフトのデバッグしたことある?
異常終了?
正常終了?
どっち?
そりゃその動画自体の225000フレーム辺りにエラーがあるのだろう。
SuperC以外で圧縮するとか無圧縮でやってみるとか。
437 :
デフォルトの名無しさん:2009/08/21(金) 11:04:08
2枚の画像間でピクセル間のマッチングを取りたいんですけど、
cvFindStereoCorrespondenceで得た視差画像ってどうやって使うんですか?
画像から何ピクセルずれてる、っていうことが分かるんでしょうか?
初歩的ですみません。
438 :
384:2009/08/25(火) 21:51:07
439 :
384:2009/08/25(火) 21:57:52
あげ
ソースは?
442 :
384:2009/08/26(水) 07:29:06
443 :
384:2009/08/27(木) 00:31:55
C#で作ったのか
ソース見たとこOpenCV使ってないみたいだね
OpenCVSharpかSharperCVを使えばC#でもOpenCVアプリが作れるから使って連携させたらどう?
OpenCVSharpは日本人が開発者でサンプルソースも日本語で説明してくれてるし使える関数も多いからオススメ
445 :
384:2009/08/28(金) 07:27:38
>>444 >OpenCVSharpかSharperCV
全く存在しらんかった。ちょっと調べてみます。
なんにしろソースさらせるとは、すごい
がんばれ
448 :
385:2009/08/28(金) 18:08:54
はじめまして、OpenCVについてお聞きしたいのですが最近OpenCVを始めたばか
りの初心者のものです。
Microsoft Visual Studioで処理した画像を表示させるために、タブのデバッグ
でデバッグ開始させた後にコンパイルは通るのですが、
『Visual Studio Just-In-Time デバッガ』とウィンドウが出てきまして、
そこで『image.exe[4444]でハンドルされていないWin32の例外が発生しました。』
と表示されているのですが、どうしたらよろしいでしょうか?
同じような画像で処理すると片方だけ上記のようなエラーが出て、画像処理ができません。
http://tessy.org/wiki/index.php?%A5%D3%A5%C7%A5%AA%A4%CE%C6%C9%A4%DF%B9%FE%A4%DF ここのサイトに、
OpenCVで生成した非圧縮AVIはOpenCVで読み込むと失敗する模様
と書いてあるんですが、どうもその現象に嵌ったらしくて動画が読み込んだときに右にずれてしまいます(ずれた分は左にから表示される)
対策として、
image->imageData += 0x400 とすると合う.
と書いてあるんですが、いまいちこれをどこに挿入したらいいのかわかりません。
これっておそらく動画のヘッダ部分が1024バイト分=0x400ずれているのだと思うのですが、
どの辺りに挿入したらいいのかわかりますか?
CvCapture *video; // キャプチャ構造体
IplImage *image; // 画像のポインタ(領域確保は不要)
cvNamedWindow(WINDOW_INPUT); // ウィンドウ生成
video = cvCaptureFromAVI(DEFAULT_VIDEO);//キャプチャ構造体生成
while(c = cvWaitKey(1), c != 27){ // ループ
image = cvQueryFrame(video); // ビデオから1枚取得
cvShowImage(WINDOW_INPUT, image); // 画面に表示
}
cvReleaseCapture(&video); // ビデオ構造体解放
cvDestroyWindow(WINDOW_INPUT); // ウィンドウ破棄
// imageはこの場合解放してはいけないらしい
image = cvQueryFrame(video); // ビデオから1枚取得
image->imageData += 0x400
cvShowImage(WINDOW_INPUT, image); // 画面に表示
素直に、これでいいんでねーの? 責任は取らんが。
image->imageData += 0x400
とかするとメモリーリークしそうだが大丈夫なんかね
640*480だとキャプチャ出来るのに320*240だと無理なのは何が関係してるんでしょうか先生
455 :
デフォルトの名無しさん:2009/08/31(月) 11:44:48
色々なカメラを試しましたか?
お聞きしたいのですが、
CvScalar point = cvGet2D(img_gray , y , x);
double a = point.val[0];
とやっても、aに値が格納されてないみたいなのですが…。
代わりの方法ってどのようなものがありますか?
グレースケール画像の画素値が欲しいのなら
unsigned char value = (unsigned char)img_gray->imageData[ x + y * img_gray->widthStep];
458 :
456:2009/09/02(水) 21:25:24
OpenCV 1.1 + Python2.6なんですが、サンプルを実行すると以下のようなエラーになります。
_ml.pydはsite-packages\opencvにあります。
解決策ご存じないでしょうか?
C:\Program Files\OpenCV\samples\python>C:\Python26\python.exe contours.py
OpenCV Python version of contours
Traceback (most recent call last):
File "contours.py", line 6, in <module>
from opencv import cv
File "C:\Python26\lib\site-packages\opencv\__init__.py", line 75, in <module>
from ml import *
File "C:\Python26\lib\site-packages\opencv\ml.py", line 7, in <module>
import _ml
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
すみません。自己解決しました。
C:\Program Files\OpenCV\binをPATH二対かしたらできました。
461 :
デフォルトの名無しさん:2009/09/07(月) 07:40:36
Pythonってなに?
OpenCVにはPython用のモジュールが入っていてありがたい
463 :
デフォルトの名無しさん:2009/09/08(火) 03:59:28
unsigned char R, G, B;
B= (unsigned char) color_img->imageData[y*color_img->widthStep + x*color_img->nChannels];
G= (unsigned char) color_img->imageData[y*color_img->widthStep + x*color_img->nChannels + 1];
R= (unsigned char) color_img->imageData[y*color_img->widthStep + x*color_img->nChannels + 2];
これじゃRGB値取れないんですかね?真っ白になります
日本の国旗のような画像と真っ白な画像の色相だけを取り出してヒストグラム距離(相関)を算出すると何故か1になる…
何故なのでしょうか?
466 :
デフォルトの名無しさん:2009/09/08(火) 21:53:34
まず、質問の仕方から勉強してください
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
> > > > > > > > > > >>>>> <<<<< < < < < < < < < < <
>>465 なにを計算してるのかわからんけど、日本の国旗って白と赤しか使ってなくて赤の色相って0だから全部0なんじゃね?
469 :
特になし:2009/09/09(水) 23:31:49
皆様はじめまして
opencvで処理した画像をフルスクリーンで表示させたいのですが、どういった方法がありますか?
フルスクリーンのウィンドウに画像を貼る
OpenCvSharpつかってればいいだろ.
ttp://opencv.jp/sample/object_detection.html#face_detection ここの顔の検出のサンプルコードを参考にOpenCvSharpを使ってVisualC#2008EEで同じように書いてるのですが
const string cascade_name = "haarcascade_frontalface_default.xml";
CvHaarClassifierCascade cascade;
(略)
// (2)ブーストされた分類器のカスケードを読み込む
cascade = Cv.Load<CvHaarClassifierCascade>(cascade_name);
ここで
保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
とエラー。
---------------------------------------------------------------------------------
const char *cascade_name = "haarcascade_frontalface_default.xml";
CvHaarClassifierCascade *cascade = 0;
cascade = (CvHaarClassifierCascade *) cvLoad (cascade_name, 0, 0, 0);
---------------------------------------------------------------------------------
この部分をC#で書くと、どのようになるのでしょうか?
473 :
デフォルトの名無しさん:2009/09/10(木) 20:49:35
腕の動きを計測しようとしています。
画像から腕領域(前腕と上腕)の輪郭線の抽出はまではできました。
cvFitEllipse2関数は輪郭を最もやく近似する楕円を返すということ
なので、前腕と上腕の分離に使えないかと思ったのですが、
下記のような上腕(◇部分)と前腕(■部分)となる輪郭線が
あった場合、同関数では全体で1つの楕円で近似します。
◇
◇
■■■◇
上腕部分で一つの楕円、また前腕部分でもう一つの楕円で
近似したい場合(合計で2つの楕円で近似したい場合)はどのような
パラメータを操作したらよいのでしょうか。
もしくは、なにか別の方法などがありましたら教えていただけないでしょうか。
よろしくお願いします。
単純にアフィン行列で画像を回転させると角の部分が切れてしまいます。
角が切れないように回転させる(四角でなくひし形などに画像が出力される)方法
はないでしょうか?
出力先を回転後の画像が収まるサイズにすれば良いだけでは?
入力を大きくとれば?
■■■■■■■■■■■■■■■
■■■■■■■■■■■ ■■■■
■■■■■■■■■■ ■■■
■■■■■■■■■■ ■■■■
■■■■■■■■■■ ■■■■■
■■■■■■■■■■■■■■■
このような2値画像があったとします。
白い部分のx座標とy座標の最大最小値を求める関数はありませんか?
ありません。
自分で考えろ。
479 :
デフォルトの名無しさん:2009/09/12(土) 17:49:40
>479
つExamples
表紙の下にあるやつな。
サンクス☆
482 :
デフォルトの名無しさん:2009/09/13(日) 08:31:15
画像のヒストグラムの作成方法は見つけたんだけども、
ヒストグラムから画像を書き戻す方法がわからない。
明るさ、コントラストの調整するプログラムを作りたいんだけども。
参考になりそうなサンプルがあったら教えてください。
cvConvertScale・・・はガンマが選べないのか
痒い所に手が届かない
484 :
デフォルトの名無しさん:2009/09/14(月) 02:28:48
普通にROI使ってcvCopyじゃダメなのか?
>>485 そのやり方で解決いたしました。ありがとうございます
M(__)M
copyatは謎に包まれたままですが・・
487 :
デフォルトの名無しさん:2009/09/14(月) 07:01:25
ヒストグラムから画像を書き出す…?
何トチ狂った事を言っているんだ。落ち着いてヒストグラムって何かを調べよう。
ある色の濃さ以上だったら表示したいのかな
488 :
482:2009/09/14(月) 08:33:58
用件としては、画像のブライトネスとコントラスト調整するプログラムを作りたいんだけども。
一般的なブライトネスとコントラストの調整は、どちらもヒストグラムを使わないのが基本になるわけだが。
そこは先ずできているのかな?
輪郭線の座標取得のアルゴリズムで思いつく限りの一番軽い手順って何すかね
二値化した画像の白点の座標を取得する方法あります?
492 :
491:2009/09/15(火) 21:28:43
自己解決しました
みんなの対応を聞きたい。
最近、USBカメラがUVC化してるが
けっこう前に作ったプログラムに組み合わせてみたら
動ごいてたのが動かなくなってびっくり。
どうもcvCreateCameraCapture関数がUVCに対応してないらしいんだが・・・
これ、対応すんのかな?
自分で書けばいいだろ、OSSなんだから。
495 :
482:2009/09/17(木) 02:46:47
自己解決できました。
ルックアップテーブルと行列演算がキーワードだった。
496 :
デフォルトの名無しさん:2009/09/17(木) 16:21:05
このライブラリとウェブカメラ使って
自宅監視システム作ってる人とか居るの?
497 :
デフォルトの名無しさん:2009/09/17(木) 18:53:49
自宅警備員には必要ありませんが、なにか?
自室監視システムなら。
>>498 おかんが勝手に入ってきて
エロ(本|ビ|ゲ)を見つけだして机の上に置いて
「気にしてませんから」の書き置きをしていったり
しないようにですねわかります
おかんだって昔えっちぃなことをして俺らを生んだわけだから
気にするほうがおかしいだろ
cvSaveImageの保存先を\\image等 直接指定ではなく、C:\programfiles\opencv\image
のようにアドレスで指定するにはどうすればいいでしょうか?
21日に2.0リリースされるね
四角形の4隅の座標だけが既知の状態で
入れ子になってる親と子の輪郭だけ残して
孤独な輪郭は除外するプログラムを書きたいのですが、どうすればいいでしょうか
画像の一部分を適当にコピー、別ファイルにコピーしたものを何個もペースト、保存するには、
どうやると良いんでしょうか。(保存はcvSaveImageだと思いますが)
じゃー思ったとおりcvSaveImageすればいいんじゃね。
roiを設定してコピーじゃないのかな
508 :
デフォルトの名無しさん:2009/09/24(木) 17:50:19
画像比較して一致しているかを判断するプログラムを作るのは
OpenCVかC++かどっちがいいですかね?
diff
md5sum
java
512 :
デフォルトの名無しさん:2009/09/24(木) 18:01:08
>>508 日本語で説明してください
やりたい事も不明確だし、どっちがいいか聞かれても同じものじゃないから比較しようがない。
釣りなの?
513 :
デフォルトの名無しさん:2009/09/24(木) 18:05:03
すみません。
例えば衛星画像(住宅密集地)をエッジ処理をかけて、
地震など災害が起きたときの画像もエッジ処理かけて、
2枚の画像(元画像と災害時画像)を比較したいんですが、、、
514 :
デフォルトの名無しさん:2009/09/24(木) 18:09:56
その用途ならVCとオープンCV両方が最適だよ。
エッジを取ったり一致を比較するのはオープンCV任せで。
>>513 中越地震程度じゃ住宅密集地には何の変化もないぞよ。
住宅密集地を対象にするなら阪神・淡路のような大震災クラスの画像でやらない
と卒論にならん。
山崩れにしたら?
可視光以外の画像、赤外とかならそれで良いかもしれんな
円を取り出すことってできるんですか?
ROIの円形バージョン的な。
というかそもそも円形画像を扱う型がないんか。
教えてクリリン
518 :
デフォルトの名無しさん:2009/09/27(日) 15:48:52
>>515 確かに阪神大震災クラスの画像じゃなきゃ変化が取れないですよね。
OpenCVで双方の画像を比較するのに使うアルゴリズムって、
サンプルコードみてもやはり無いんですが。。。
どういうものを使ったらいいですかね?
509さんのようにCで「diff」を使うほかに。。。
int key=0;
while(1){(省略)
key = cvWaitKey(0);
(動作) } ってすると必ず1回目のwaitKeyが-1で飛ばされて2回目から止まるんですが、これミスデスかね・・・
521 :
520:2009/09/28(月) 01:06:52
ウィンドウを表示しないとキー入力受け付けてくれないんですね…解決しました
522 :
デフォルトの名無しさん:2009/09/28(月) 10:49:25
>>519さん
確かにオプティカルフローのサンプルは使えそうですね!
どれだけ移動したか考えると、比較につながりそうです。
ありがとうございます、すこしプログラムと睨めっこします。
523 :
デフォルトの名無しさん:2009/09/29(火) 19:16:39
どこも変えずにコマンドラインで画像指定して実行すりゃよいのでは
cvLoadImage()で画像を読み込んでるのは明らかなんだし
>いざデバッグするとエラー
そのエラーを取るのがデバッグだろうにw
argvが何か分かるようになりなさい
cvLoadImageを調べなさい
===============================
if (argc != 3 ||
(src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
(src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
dst_img1 = cvLoadImage (argv[2], CV_LOAD_IMAGE_COLOR);
の行が以下でいいかと。
src_img1 = cvLoadImage ("test1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
src_img2 = cvLoadImage ("test2.bmp", CV_LOAD_IMAGE_GRAYSCALE);
dst_img1 = cvLoadImage ("test2.bmp", CV_LOAD_IMAGE_COLOR);
ビデオの入出力が全くうまくいきません。
cvCaptureFromFileで動画ファイル(avi)が何故か読み込めない上に(色々な動画で試しました)
カメラ画像を出力しても0KBのファイルが生成されてしまいます。
プログラム以前に何か設定の部分で間違っているような気もするのですが改善策をご存知の方はいらっしゃいませんか?
527 :
526:2009/10/01(木) 07:02:44
すいません、出力に関しては解決しました。
2.0来たな
シーケンスについての質問です。
現在cvCreateSeq(0, sizeof(CvSeq), sizeof(Data), storage))でシーケンスを作っています。
Dataは自作構造体で、{short flag; CvPoint pt[4];}です。
flag部分を0に設定してData型の変数をpushした後、
シーケンス内のデータの変更を行う方法を教えていただけませんでしょうか。
cvGetSeqElemで読み出せることはわかっているのですが…
よろしくおねがいします。
ctypes_opencvは2.0対応してるのだろうか
cvFindFundamentalMatが動かないなぁ・・・
サンプルのコードとか試してるのに
OpenCV ver1 と ver 2を両方いれたら問題おきるだろうか
1 /usr
2 /usr/local
533 :
デフォルトの名無しさん:2009/10/05(月) 17:51:45
534 :
デフォルトの名無しさん:2009/10/05(月) 17:53:37
以前オプティカルフローを質問させていただきましたものです。
今回test1.bmpとtest2.bmpを元にプログラムを実行したのですが、
警告・エラーはないのですが結果が出ませんでした。
どこが悪いかご指摘をいただけると幸いです。
以下プログラムです。
535 :
デフォルトの名無しさん:2009/10/05(月) 17:55:19
#include <cv.h>
#include <highgui.h>
int
main (int argc, char **argv)
{
char windowsNameInput1[] = "Input1";
char windowsNameInput2[] = "Input2";
char windowsNameImageHS[] = "ImageHS";
char windowsNameImageLK[] = "ImageLK";
int i, j, dx, dy, rows, cols;
IplImage *src_img1, *src_img2, *dst_img1, *dst_img2;
CvMat *velx, *vely;
CvTermCriteria criteria;
if (argc != 3 ||
(src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
(src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
src_img1 = cvLoadImage ("test1.bmp", CV_LOAD_IMAGE_GRAYSCALE);
src_img2 = cvLoadImage ("test2.bmp", CV_LOAD_IMAGE_GRAYSCALE);
dst_img1 = cvLoadImage ("test2.bmp", CV_LOAD_IMAGE_COLOR);
dst_img2 = (IplImage *) cvClone (dst_img1);
536 :
デフォルトの名無しさん:2009/10/05(月) 17:59:55
// (1)速度ベクトルを格納する構造体の確保,等
cols = src_img1->width;
rows = src_img1->height;
velx = cvCreateMat (rows, cols, CV_32FC1);
vely = cvCreateMat (rows, cols, CV_32FC1);
cvSetZero (velx); cvSetZero (vely);
criteria = cvTermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 64, 0.01);
// (2)オプティカルフローを計算(HS)
cvCalcOpticalFlowHS (src_img1, src_img2, 0, velx, vely, 100.0, criteria);
// (3)オプティカルフローを描画(HS)
for (i = 0; i < cols; i += 5) {
for (j = 0; j < rows; j += 5) {
dx = (int) cvGetReal2D (velx, j, i);
dy = (int) cvGetReal2D (vely, j, i);
cvLine (dst_img1, cvPoint (i, j), cvPoint (i + dx, j + dy), CV_RGB (255, 0, 0), 1, CV_AA, 0);
}
}
>>533 524は俺なんだけど。もっと落ち着いたらいいんじゃね?
>if (argc != 3 ||
argcが3じゃなかったらreturn -1で終了なんだけど、ここは大丈夫?
「結果が出ない」っていうのはどういう状態なのさ
画像読み込みの失敗等のエラー処理もしてないんだし、src_img1の値を表示させたり
適当なとこにprintf("ここまで動いた\n");とか入れてチェックしてみたら?
538 :
デフォルトの名無しさん:2009/10/06(火) 18:25:31
落ち着きが無いものです。。。
本日研究の週間報告でオプティカル(以後OP)を
使って画像比較をすると報告したら、
OPは画像ではなく物体移動すなわち動画が適しているからね。
といわれ、画像の差分をまずはとりなさいといわれました。
イメージとしては
ttp://www.gsi.go.jp/WNEW/koohou/444-6.htm これをOpenCVで表示するとなると、
どんなプログラムになるんですか?教えていただけますか?
質問する前に少しは考えるなり調べるなりしろよ・・・
検索すればすぐにわかるんだろそんなこと
OpenCVの前に画像処理の本を読め
画像処理をろくに理解していなくても画像処理できるってのがOpenCVの存在意義だろ
どんな道具があるかとか、道具の使い道は事前に知っておこうなって話だけどね
むしろ、そういった知識を体系的にまとめた本とかある?
プログラミングの前に二進数勉強しろとまでは言わないけど
知らなければ損することもいっぱいあることに気付いて欲しい
いやいや二進数は必要だろう。
でも、画像処理に関する知識はいるね
学生か何かか?教えてくれる友人がいないのか?
とっかかりから詰まってると、このあとも詰まるぞ。
かわいそうだからヒントだけ書いてやる。
IplImage *imgpre,*imgpst,*imgdif;//震災前画像、震災後画像、差分画像
imgpreに震災前の写真.jpgを読み込ませ、カラーならグレースケールにしておく
imgpstに震災後の写真.jpgを読み込ませ、カラーならグレースケールにしておく
imgdif=cvCreateImage(元写真と同じサイズ,IPL_DEPTH_8U,1);// 差分画像
cvAbsDiff(imgpre,imgpst,imgdif);//キミの研究テーマに不可欠な関数だ!
cvShowImage (適当,imgdif);//表示
で、
ttp://www.gsi.go.jp/WNEW/koohou/444-6.htmの 地震前後の写真を使ってやってみな。
上の手順なら、差分だけ白くなると思う。
ウェブページのように差分を赤く表示したいなら、
適当に色変換してから、地震前の画像にインポーズしておけ。
グレースケール化は
cvCvtColor(絵1,絵2,CV_BGR2GRAY);とかな。
関数の詳細は自分で調べろ。
あとオプティカル、で斬るな。それじゃ単なる光学全般だ。
どうしても略したいなら「フロー」。
そう言ってる人は学会で見たことがある。略称なら"of"だ。
キミの指導教官の給与を一部を、私の口座に振り込んでおくようにw
549 :
デフォルトの名無しさん:2009/10/09(金) 02:27:57
本当にすみません。学生です。
私の学科はソフト・ハードを広く浅く学ぶ学科で、
プログラミングも深くやっておらず理解していません。
そのためOpenCVを進められたわけです。
みなさんの意見を元に、再度頑張りたいと思います。
CvFindContoursで拾った輪郭の総数ってどこに入ってるんでしょうかー
>>550 cvFindContours関数の戻り値が輪郭の総数になってる
552 :
デフォルトの名無しさん:2009/10/12(月) 01:00:59
2.0 の Windows バイナリ配布は
まだPythonバインディングがうまく動かね〜
ランタイムの違いかなぁ
かといってビルドしなおす気にもならね〜
python 3 ?
554 :
デフォルトの名無しさん:2009/10/12(月) 01:11:10
いや、普通の 2.6
OpenCV2.0\Python2.6\Lib\site-packages
に pth でパス通して import cv もできることを確認して
OpenCV2.0\tests\python\test.py のテストをやってみたら
いくつかだけテストとおるけどあとはエラーで
さらに途中で python.exe が停止しましたと来る。
久々に OpenCV 使おうと思ったら 2.0 になっててビビタ
うちは大丈夫
556 :
デフォルトの名無しさん:2009/10/12(月) 09:01:08
OpenCV2.0\Lib\ の下にあるインポートライブラリは
g++ 用のものなんだな.dumpbin.exe で確認した.
Visual C++ と g++ じゃ名前変形の規則が違うからなぁ.
寝る
557 :
デフォルトの名無しさん:2009/10/12(月) 09:01:58
OpenCV 1.0/1.1 の Windows 用バイナリ配布では
Visual C++ 用のインポートライブラリだったんだが・・・
寝る
自分でCmakeしてやらないと駄目だよ
mandokuse----
560 :
デフォルトの名無しさん:2009/10/12(月) 15:41:24
質問いいですか?
OpenCV2.00aをインストールし、CMakeで下記を設定しビルド
しましたが、C:\OpenCV2.0\buildにOpenCV.slnが作られませんでした。
解決方法知ってたら教えてください。
<ソースコード、ビルド先フォルダ>
Where is the source code: C:\OpenCV2.0
Where to build the binaries: C:\OpenCV2.0\build
<開発環境>
visual studio 9 2008 expression
<OS>
windows vista home basic
よろしくお願いします。
Where is the source code: C:\OpenCV2.0
Where to build the binaries: C:\OpenCV2.0
で configure + generate
不完全なソリューションができるけどビルド.
ビルドできた状態でもう一度同じ CMake すると
完全なソリューションができた気がする.
>>560 自己解決できんかったら
今後のため止めとくべき
563 :
560:2009/10/12(月) 15:58:50
>>561 configureのあと、generateを実行したらOpenCV.slnが作られました。
ありがとうございました。
https://launchpad.net/livingdead/opencv2.0-vs2008 面倒な人がいるかもしれないので
Visual C++ 2008 使ってる人用に CMake して
ソリューション作って本体と tests と samples が
ビルドできる状態のものをあげておきます.
手元のノートPCにカメラが無いのでその系統の
テストはできてません.
あれ?hist-backprojpatch のテストで落ちるなぁ・・・
落ちるといえばバイナリ配布に最初から入ってる
cvtest.exe でも私の環境だと落ちますが.
初歩的な質問ですいませんが、2台のカメラから画像を取得したく、
cvCreateCameraCapture(0)、 cvCreateCameraCapture(1)と割り振り、
キャプチャ用の構造体をcapture、capture2としているのですが、
2台目のカメラが読み込めません。
プログラム的な問題でしょうか、それともハードの問題でしょうか?
環境は、XpでCPU:C2D、カメラは両方エレコムのUSBカメラです。
デバイスマネージャとかの表示はどう?
USBのポート変えても同じ?
>>565 画を取り込む前に、
デバイスとして見えているかを確認してからじゃない?
まずcvcamGetCamerasCountでカメラの数を調べてみたら?
569 :
デフォルトの名無しさん:2009/10/14(水) 18:30:41
549です。
たびたび質問まことに申し訳わりません。
差分までのプログラムはなんとか組む事ができました。
ただ差分処理をかけると画像1と画像2が合成したように
見えてしまうのは何故でしょうか?
547さんの言うとおり、ある程度は組みましたが
変化しているところが視覚的に理解できませんでした。
どのようにしたらいいのでしょうか?ご教授お願いいたします。
>>569 全白と全黒、全白と全白+文字、あたりで差分してみれば?
>>569 君のプログラムでどんな処理してるかわからんのでアドバイスは難しい。
プログラムの確認という意味では自分で簡単な画像を作って検証してみたら良い。
それとたびたび来るつもりなら名前欄に最初のレス番入れてくれ。アンカも>>で付けてくれ
何言ってるのかいまいちよくわからんから
ブログでも作って、コードと画像乗っけて質問したほうがいいよ
コードと画像乗っけて質問したほうがいいよ
Sourceforge とかで公開しながらの方が
話も進みやすいんじゃないだろうか
>>569 カラーのまま差分とってるから、引ききれないのとかが残って反転したようになって
写真のネガみたいになってるんじゃないか?
全部グレーに変換してから差分を取れば?
なんとか正規化できそうなもの
撮影ポイント、撮影角度、撮影距離の違い。
時間帯による全体的な明るさの違い。
影響を除くのが難しそうなもの
雨の前後の土やアスファルトの色
雲や煙。
太陽の向きによる建物の影
季節による植物の成長、落葉、枯死。
地震のあとの水の濁り。
まあ、頑張ってくれ。
577 :
デフォルトの名無しさん:2009/10/15(木) 15:21:26
学生なんだろ?
先生に聞けよ
OpenCVがどうこうってレベルに達してないように見えるしさ
>>577 とりあえずOpenCVの本買って一から勉強したほうが早いよ
素人の俺でも君の理解の低さがわかってしまうくらいだ
>>577 機能自体はちゃんと動いてる。
みんないってるけど本買って読んだ方がはやい。
奈良先端の本かオライリーの本がお勧め。
奈良先端の本の方が初心者向けでわかりやすいと思う
とりあえず大津の方法とかで二値化したほうがいいんじゃねえの
オライリーの本ってどんな感じ?
奈良先とCUTTの本持ってるけどもう少し技術的な部分を学びたくて気になってるんだが
如何せん近所の本屋になくて困ってる
584 :
579:2009/10/15(木) 19:13:33
あれ、オプションのmodeを消したら動いた
>>577 HPにコメント付ける所無いんだね(だからblogのようなシステムが適しているって言われる
ここ(2ch)では集中した議論は出来ないぜ
ところで自分が最終的に欲しい絵をラフでいいから作ってみなよ
「この問題の答えを教えてください」は誰もが答えたくないが
「こういった問題の考え方・解き方を教えてください」なら誰かが答えてくれるかもしれない
577は良くやってるさ。HPまで立ちあげたんだから。
誰か答えてあげよう。
>>586 答えるにしてもソースコード自体は問題ない。
>>577がどこが足りなくて最終的にどんな形で見せたいのかがわからんからなんとも。
学生のようだから俺が要求満たすものつくったとしても為にならんしな
>>577 570が言うように、いきなりスマトラの画像じゃなくて最初は簡単な画像で試してみようぜ。
ペイントソフトで適当に丸とか四画とか描いて2枚目にはちょっとずらして描いてみるとか。
ソースコード自体はなんも間違ってないしネガみたいな結果画像も間違ってはないな。
間違ってるのは差分の考え方だけ。
589 :
デフォルトの名無しさん:2009/10/16(金) 13:41:54
>>577 ちなみにヒント言うと、海のとことか森のとことか一見変化ないように見えるけど
画像の画素レベルではめっちゃ変化してるからな。
>>589 分かりやすいようでめっちゃ分かりにくいw
要するに、ずれた海岸のとこだけが白くて他は黒い画像が得られればいいんだろ?
要するにあれだ、指導教官は「地震による変化部分」を抽出するという課題を与えたが、とりあえずの手がかりとして差分で処理した場合を試してみろといったんだろ。
当然指導教官も差分処理だけで課題が解決するとは思っていない。
どんな教育機関のどんな教官なのか具体的に知らないので、想像に過ぎないが、課題を解決する理想的な出力と差分の出力との間に、どんな違いがあって、その溝を埋めるにはどうすればいいか考えさせたいんだと思うよ。
理想的な結果を得ることも大事だけど、それにいたる過程や考察を求めているんじゃないのかな。
(そうでなければ、ひどく専門的な課題だろう。大学院クラスの。)
そうだな。プログラムと格闘するまえに、まずどうやったら実現できそうかを
ちょっと纏めてからやり始めたほうがいいって
おちつけ
まず実現する必要があるのかを考えないと
ver2への対応は,そろそろはじめてもいいのかな
もう構造体の変数名変更とか大きな変更はない思っていい?
>>577 カラー画像のまま差分し、int型に写してから
10倍くらいに増幅し、255以上をtruncateすると
それなりに面白い画像になった。
601 :
デフォルトの名無しさん:2009/10/18(日) 20:37:45
やりたいことは良く分かった。というか分かってる。
知りたいのは、どこが分かってないかだ。そこを自分で明確にしないとな。
全部最初から分かんないじゃどうしようもないぜ。
>>588だけど、ペイントでそんなにごちゃごちゃ描くんならスマトラのリアル写真と変わんないじゃん。
ペイントでやるなら、たとえば塗りつぶした長方形一つだけ描いて2枚目には
少しずらして描いて、差分取ってみ。塗りつぶす色がいろんな場合もやってみるといいかもな。
結果が良くわかんなかったら、その結果画像もアップしといたら
議論しやすいんじゃない?
これ以上はここじゃなくてブログでも作ってやってくれ
取りあえずの課題
「cvAbsDiff関数がどういうことをしているかを画素レベルで説明しなさい。」
ここでやれ
せっかくネタ提供してくれてるんだ ここでやれ
>>601 やることがわかってるんなら自分でやれ。
差分をとって色を変換。それを元画像に重ね合わせ。
ここら辺はOpenCVなら関数一つづつでできるような簡単なもの。それを調べもせずに人に頼るなよ。
>>601、失敗した結果画像をアップしないとこの問題が意外と難しいってのが
皆に分からないぞ。
例えば1ピクセルおきの格子状の画像があって、それが撮影の誤差で2枚目で
1ピクセルずれたとすると、人間の目には差が無いように見えるが差分を
取ると大きな違いが出てくる。
610 :
デフォルトの名無しさん:2009/10/19(月) 14:59:21
611 :
デフォルトの名無しさん:2009/10/19(月) 15:04:33
いいって 気にしないでここでやりなよ 別の場所でやったら誰も見ないしw
>>610 できるんじゃない?同じXMLデータなんだから。そのデータの扱い方だって
バージョンによって違うとは思えない。
614 :
565:2009/10/20(火) 17:02:33
>>566 デバイスマネージャでは2つとも認識されています
ポート変えましたけど駄目でした
>>567 ↓のようにコードを作成したのですが、"カメラ2が見つかりません"となり、2つめのカメラを認識しません
if ( ( capture = cvCreateCameraCapture(0) ) == NULL ) {
printf( "カメラが見つかりません\n" );
return -1;
}
if ( ( capture2 = cvCreateCameraCapture(1) ) == NULL ) {
printf( "カメラ2が見つかりません" );
return -1;
}
>>451に似た症状なのですが、
WEBカメラから読み込んだ動画が、上下左右にずれてしまっています。ずれたぶんは451どうよう左と上から表示されます。
ずれの大きさについては毎度ランダムで、稀にずれは無く表示されることもあります。
別のカメラを購入して試す前に、何かしらの手段はないでしょうか。
過去ログみても、解決策でてないきがする・・
616 :
デフォルトの名無しさん:2009/10/20(火) 21:14:18
小銭持ってPCショップへ行け
メシ二回分ほどでカメラくらい買えるだろ
ログみてるヒマあったら買ってくればよかったじゃないかアホかこいつ
>>614 linuxなら
cvCreateCameraCapture(CV_CAP_V4L + 0)
cvCreateCameraCapture(CV_CAP_V4L + 1)
で複数動く
ノイズって縦棒のこと?
>>618 それだけ見せられても困る。
せめて該当部分のコードがないと
あ、自己解決しましたすみません!
渡すチャンネル数がやっぱり合って無かったですOTL
(drawcontoursを1で処理してました・・・)
かわいいおてて
縦線は何だったんだ!
624 :
621:2009/10/21(水) 14:10:14
>>622 ありがとうございます(?
>>623 縦線はたぶん3つあるチャンネルのうちの1つに描画されてるやつだと思います。。
625 :
デフォルトの名無しさん:2009/10/21(水) 23:09:50
haartraining で、ポジ画像7000枚 ネガ画像3000枚で、
数日計算しても、正しい検出がほとんどできません。
ほんとにこれで使える haar cascadeのファイル作れるの?
実際使えるのを作れた方いらっしゃいます?
コツを教えてください。
[1] 現在モニタに映っている静止画像
[2] bmpで保存した静止画ファイル(の画像)
・・・があるとき、[1]の中から[2]を探す処理をしたいと思っています。
cvMatchTemplate() が最も目的に近いと思いますが、
第1引数([1]相当)のCvArr*を準備するにはどのような方法があるでしょうか?
いったんファイルに保存して、vcLoadImage()するしかないですか?(まさか・・・ね
>625
認識させたい画像の集合に問題があるんじゃないか?
極端に違ったものをポジ画像に混ぜると、いい結果が出ないんじゃないだろうか。
また、ネガ画像にポジ画像と同じようなものが混じっていると、よくないと思う。
この手法に限らず、学習に使う画像の枚数を単純に増やせばいいわけではなく、ポジ画像とネガ画像の集合の性質に依存していると思うが。。。
>>625 ポジ画像は多ければ多いほどいい(ツールで自動生成したやつでもOK)が
ネガ画像は数10枚でも工夫すれば十分いけたぞ
ネガ画像は最初は壁とか平坦なもの(数枚でもいいはず)でやってみ
学習認識させるものは何なの?
haartraining学習のやり方俺も教えてほしい
詳しいサイトとかないの?
630 :
デフォルトの名無しさん:2009/10/22(木) 10:33:42
>>627-628 ありがとうございます。
使えるものであることわかっただけでちょっと安心いたしました。
特定の書籍の表紙を認識させたいと取り組んでいます。
表紙内にある出版社のロゴ部分や、表紙全体で haar training をさせてxml
を作ったのですが、どちらも精度が低く使い物にならないという状況なんです。
ネガ画像は、
http://gihyo.jp/dev/feature/01/opencv/0004?page=1 でダウンロードしたもの+αで、3000枚なのですが、
ポイントはネガ画像のコレクションにありそうですね。他のネガ画像でやってみようと
思います。
本当にありがとうございます。
面白そうな応用だな
詳細が分からんからなんともいえないが
detectionでやることじゃない気がする
634 :
デフォルトの名無しさん:2009/10/22(木) 20:15:17
こんばんは。
WindowsXP + OpenCV1.1 + VC++2008 で以下の画像処理を試みているのですが、
アルゴリズムが思いつかず、ご教授いただきたく思い質問させていただきます。
静止画像の中に、不特定数の物体があり、物体は様々な角度を向き、
撮影距離も不特定なため様々な大きさです。
また、撮影場所も不定なため、不要なノイズが入る可能性が高いです。
ここで物体は、単色で塗られた一定サイズの正方形を2つ組み合わせた
小さな長方形状の用紙で、この2色の色を識別することを目的としています。
OpenCVを用いて長方形(含、角度のついた台形)を検出し、
その長方形内が2色(ある程度は撮影誤差として許容)であれば、
物体が映っているものとして色を検出しようかと考えているのですが、
長方形の検出に適している手法をご存知でしたら
ご教授願えないでしょうか。
また、改良案等ございましたらご指摘いただけたら大変嬉しいです。
乱文なため説明不足等あるかもしれず申し訳ないですが、
なにとぞよろしくお願いします。
もうそれOpenCVの話じゃないし・・・
>>634 用途がよくわからんが、何らかの特徴点検出と色情報による識別を組み合わせて
何とかなるかな???
具体的にどんな画像から検出したいんでしょう?
アダルト画像だけフィルタするためには使えないものだろうか
俺好みのAV女優だけを抽出したい
俺好みの体位だけを抽出したい
640 :
634:2009/10/23(金) 19:35:20
レスありがとうございます。
>>635 OpenCVもしくは何らかの手法で四角形を抽出したいのです。
ハフ変換等で矩形抽出や線抽出は調べましたが、
その方向では実現できそうになくご教授願いに参りました。
>>636 説明下手で申し訳ございません。
守秘義務が関わっており、重点は伏せなければならず、
非常に心苦しいです。
許可を取れた範囲でご説明します。
サンプルのリストを以下に挙げます。
お手間をおかけしますがパス[cv]で設定しております。
ttp://www1.axfc.net/uploader/Img/so/63011 このような形の2色1組と周囲のグレーを利用し、
「カメレオンコード」に似たシステムを
実装したいと考えています。
実際の撮影物にハフ変換や矩形抽出を試みましたが、
良い結果が得られませんでした。
なにとぞご教授のほど、よろしくお願いします。
守秘義務云々ってことは貴方のビジネスなわけでしょ?
ならカメレオンコード(特許出願中)の愛知の会社と業務提携したらいいんじゃね
>>640 どうしてもOpenCVのAPIを使ってやるという宿題かと思ったよ
画像処理スレで質問しなおせば
OpenARっぽい処理にみえるから、アルゴリズムパクったらどう
644 :
デフォルトの名無しさん:2009/10/24(土) 03:38:30
>>640 QRコードの読み取りの方法も参考になるかな
QRコードなんてそこらじゅうにあるが
デコードでぐぐr
647 :
デフォルトの名無しさん:2009/10/24(土) 21:19:13
井村さんのラベリング関数よりも速いラベリング関数ない?
井村さんのだとラベル数が多くなったりすると0.4〜0.5秒かかることがあるんだが
>>647 画像サイズ、ラベル数、計算環境がわからないが
10,000×10,000ピクセルの画像でラベルの数が10万くらい、ひと昔前のオンボロPCという環境だと
0.5秒かかっても仕方ないのでは
知見があれば教えてください。
ttp://gihyo.jp/dev/feature/01/opencv/0004?page=2] の正解リストファイル(OK.txt)の記述で、
120 100 45 45
100 200 50 50 50 30 25 25
45 55 60 60
・・・
のように縦横サイズが違う場合、例えば
createsamples.exe haartraining.exe で指定する -w -h
の大きさは、どのように考えれば良いでしょうか?
例えば、リスト内の平均値をとって 1/2 する・・・という
方法でしょうか?
もう1点、上の例では画像の縦横比は 1:1 ですが、
120 100 100 50
45 55 50 75
・・・
のように縦横比が違う正解領域の場合、
createsamples.exe haartraining.exe で指定する -w -h
の大きさは、どのように考えればよいでしょうか?
縦横比を変えた -w -h を指定すると、
認識精度が劇的に落ちる印象があります。
createsamples.exeで文字通り、画像の指定領域を切り取って
-w -hで指定したサイズにリサイズします。
だから、後段の学習(haartraining.exe)の処理には、
リサイズ後のサイズを指定することになります。
ということで、結論的には、createsamples.exe、
haartraining.exeのそれぞれの-w -hには同じ値が指定される
ことになります。
しかし、リサイズされる前の元の画像の指定領域の縦横比が
極端に違っていると、createsamples.exe時のリサイズで、
意図したかたちとはかけ離れた結果になってしまうのではない
でしょうか?
一般的な例では、認識させたいオブジェクトが中央にくるような
1:1の矩形で指定することが多いようですが。
目などを認識させたい場合には、2:1の横長にするなどの例も
あると思います。
yes we can
653 :
650:2009/10/27(火) 22:52:32
>>650 >120 100 100 50
>45 55 50 75
>・・・
縦横比が2:1と2:3と極端にことなっているのが問題ないんじゃないかと
ほぼ同じくらいになっていないとうまくいかないと思うのですが。。
画像にもよりますが
>>653 >1枚の正解画像からたくさんの学習用サンプルを作る際は、
>背景データに対して、正解画像を回転させながら貼り付けるデータを
>自動作成できるようですが、リストファイルの場合、
>それができていないようです。
ttp://gihyo.jp/dev/feature/01/opencv/0004 に2通りの方法と書いてあるとおり、1枚から回転などして画像を作成
して使用する方法と、複数の画像を使う方法は別の方法です。
(組み合わせて使う方法があるのかも知れませんが、例が見つかりません)
お尋ねしたいのですがOpenCV1.0にPythonのPILから
画像を読ませる方法はありませんか?
adaptors.pyがダメダメなのでcvSetDataなどでやってみたのですが
ダメでした。
OpenCV自体をリコンパイルすればいけるような記事も
見たのですがそこまで出来る環境ではないので
別の方法を探しています。
python2.5用はOpenCV_1.0.exe
C:\OpenCV\interfaces\swig\python\build\lib.win32-2.5\opencv
python2.6用はOpenCV_1.1pre1a.exe
C:\OpenCV\interfaces\swig\python\build\lib.win32-2.6\opencv
CVtypesを使おう
658 :
655:2009/11/08(日) 01:31:32
巻き込まれアク禁で遅くなりました。
CVtypesを使用することにしました。
SWIG版は制約やバグが多すぎます。
CVtypesも早々にCvMatの間違いが見つかりましたが
DLLを直接操作できるので安心出来ます。
とりあえずPIL, wxPythonの画像相互変換できました。
>>656 バージョンはあっています。opencv.jpのオプティカルフローサンプルを
SWIG版で実行できています。
adaptors.pyが1.0で実行できている方がいらっしゃるんでしょうか?
659 :
デフォルトの名無しさん:2009/11/10(火) 17:37:45
660 :
デフォルトの名無しさん:2009/11/12(木) 13:03:30
カメラで撮影している映像の認識を行っています。
DELLでは正常にできたんですが、LGだとコンパイルすらできなくなります。
// カメラを初期化する
if ( ( capture = cvCreateCameraCapture( -1 ) ) == NULL ) {
// カメラが見つからなかった場合
printf( "カメラが見つかりません\n" );
return -1;
}
上記のcvCreateCameraCapture( -1 )を( 1 )に変えると
コンパイルはできるのですが映像が出力されません。
何が問題なのでしょうか?
最近始めたんですが、OpenCVのサンプルプログラム(〜.py)が動かなくて困ってます。PythonのGUIやコマンドプロンプトなど何やっても実行出来ません。ちなみにC言語の〜.exeのファイルは実行できます。
何がイケナイのでしょうか?
pythonの実行環境ができてないんじゃ?
ってexeということはWindowsかな
パス通ってる?
>何がイケナイのでしょうか?
あんたのあたま。
Pythonの環境構築ができてないのならスレ違い。
Pythonの環境がちゃんと機能しているのなら、単に「動かない」ではなく状況報告を。
>>660 パソコンのメーカー名いわれても困る。
OSと開発ソフトぐらい書かないと
コンパイルのエラーがでるならどんなエラーが出てるか書け。
映像が出ない方については
あとは使ってるカメラが同じものかパソコンに内蔵カメラは付いてるか?
カメラ付属のソフトではキャプチャできるか?
>>660 cvCreateCameraCapture( -1 )でコンパイルエラー
cvCreateCameraCapture( 1 )だとエラーが出ない
しかもLGだけ...
LGってパソコン出してたんだ。なんていうパソコン?
LGのノートは見たことあるけど、なんか変な話だなあw
関数の引数の値によってコンパイルできる/出来ないって聞いたことが無いな
マクロ展開する関数じゃないし
開発環境のコンポーネント、というかインストール状況に
差があるんじゃない?
-1の件は、「ー(音引き)」になっていると見た。
OpenCVを用いて、マーカー検出みたいなことをしたいのですが
あまりうまい方法が思いつきません。
具体的には、T字形の図形をビーカーのような容器の底面に付けて
それを下から撮影し、回転方向を取得する、と行った感じです。
(位置を取得する必要はなし)
どなたかよいアイデアがあれば、よろしくお願いいたします。
固定位置なら適当に直線検出でもできそうでは?
TじゃなくてもいいならARToolKitとか使えば短時間でできそうだけど
解像度がcvSetPropertyで320240指定しても640480にしかなりません…
使ってるカメラはLogicoolのAFOrbitで、OSはVista32です。
Mommasさんのところのライブラリ書き換え等も試したのですが一向に変わらず解像度が落ちません。
これは一体何が原因でしょうか……
原因はどっか間違ってるからじゃね
せめてその指定してる行くらい載せないとわからないよ
つかcvSetPropertyじゃなくてcvcamSetProperty?
もしそうなら、もうcvcam使わないほうがいいと思うが
魚眼レンズを使って立体視しようと思うのですがLearning OpenCVの立体視のサンプルコードが使えなくて困っています
仕方が無いので自分で作ろうと思ったのですが
エピポーラ線を算出する方法
対応点探しのテンプレートマッチングの時に画像の歪みを補整する方法
が分かりません
特に2つ目に関しては最初に画像全体を補整しようかとも思ったのですがデータの欠損が心配なので探索範囲のみを補整しようかと思っています
良い案があればご教授お願いします
675 :
672:2009/11/13(金) 10:10:22
>>673 すみません、関数名間違えてました。
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, 320);
cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, 240);
です。
デスクトップ(XP)だときちんと解像度が変わるのですがノート(Vista32)だとブレーク入れて値参照しても640*480のままで・・・
OS依存?なんでしょうか、後の違いと言えばlogicoolのソフトのバージョンぐらいです。
>>675 673ですが、openCVのDLLのバージョンが違うとかない?
cvSetCapturePropertyでググレば出てくるけどサイズ変更はopenCV1.0では未実装っぽいけど
Mommas氏云々って書いてあるが、多分そのページの解説なら
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_320x240, 0);では?
それでその修正を加えたデスクトップとノートのopenCVのDLLが違うんじゃないの
openCVはソースあるのだからデバッグ情報を出力するバージョンを作って追っかければいいよ
677 :
デフォルトの名無しさん:2009/11/13(金) 17:03:06
初めて質問します
openCVで手元にあるaviファイルを読み込んで動画処理しているのですが、aviファイルって結構重いですよね。
そこで、aviファイルをサーバに置いといて、それにアクセスして読み込ませたいのですが、不可能でしょうか?
課題提出の季節なのかな?
んなことしたら余計重くなるだろ。JK
2.0の情報なかなか出てこないな
>>677 ウィンドウズならエクスプローラでネットワークドライブ化すればできるぞ。
683 :
デフォルトの名無しさん:2009/11/14(土) 22:04:30
返信ありがとうございます。
ネットワークドライブは作ってあるので、試しにそこにおいてある画像を読み込ませたいと思います。
684 :
673:2009/11/16(月) 17:38:55
>>676 レス遅れてすみません。
デスクトップの方はそもそもcvSetCapturePropertyが正常に機能します。
ノートの方はMommas氏が書かれている方法を採っても値が変わらず、解像度等が変化しませんでした。
また、DLLはバージョンが1.0.0.1で同じでした。
ノートの方はcvResizeで無理やり変換しようと思います。
何度もありがとうございましたTT
685 :
デフォルトの名無しさん:2009/11/18(水) 09:56:29
ご教授下さい。
複数の輪郭を抽出し,一つ一つの輪郭に対して囲まれている領域(閉じている領域)全ての座標値が知りたいのですが,何か良い方法はありますか?
>>685 cvFindContoursで輪郭とって中身を見ていけばいいかと
687 :
デフォルトの名無しさん:2009/11/18(水) 14:09:20
プログラム初心者なのですが
テンプレートマッチングでテンプレート画像を4つに増やしてマッチングを行って
結果を一致度で表すプログラムを作りたいのですが、わかりやすく教えてもらえますか?
>>687 先ずはテンプレートマッチングのプログラムを作ってみてください。話はそれからでしょう。
689 :
デフォルトの名無しさん:2009/11/18(水) 17:13:47
opencvのテンプレートマッチングのソースを使ってます。
690 :
デフォルトの名無しさん:2009/11/18(水) 17:26:30
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
intmain (int argc, char **argv){
char text[16];
int i;
double result[3];
CvFont font;
IplImage *src_img1, *src_img2;
IplImage *dst_img[3];
if (argc != 3 ||
(src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
(src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
for (i = 0; i < 3; i++) {
dst_img[i] = (IplImage *) cvClone (src_img2);
}
691 :
デフォルトの名無しさん:2009/11/18(水) 17:28:04
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
intmain (int argc, char **argv){
char text[16];
int i;
double result[3];
CvFont font;
IplImage *src_img1, *src_img2;
IplImage *dst_img[3];
if (argc != 3 ||
(src_img1 = cvLoadImage (argv[1], CV_LOAD_IMAGE_GRAYSCALE)) == 0 ||
(src_img2 = cvLoadImage (argv[2], CV_LOAD_IMAGE_GRAYSCALE)) == 0)
return -1;
for (i = 0; i < 3; i++) {
dst_img[i] = (IplImage *) cvClone (src_img2);
}
692 :
デフォルトの名無しさん:2009/11/18(水) 17:28:57
// (1)3種類の手法で形状を比較
result[0] = cvMatchShapes (src_img1, src_img2, CV_CONTOURS_MATCH_I1, 0);
result[1] = cvMatchShapes (src_img1, src_img2, CV_CONTOURS_MATCH_I2, 0);
result[2] = cvMatchShapes (src_img1, src_img2, CV_CONTOURS_MATCH_I3, 0);
// (2)形状マッチングの結果を画像に描画
for (i = 0; i < 3; i++) {
snprintf (text, 16, "%.5f", result[i]);
cvInitFont (&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 4, 8);
cvPutText (dst_img[i], text, cvPoint (10, dst_img[i]->height - 10), &font, cvScalarAll (0));
} // (3)入力画像1と3種類の値が書き込まれた入力画像2を表示し,何かキーが押されるまで待つ
cvNamedWindow ("Image1", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("Image2a", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("Image2b", CV_WINDOW_AUTOSIZE);
cvNamedWindow ("Image2c", CV_WINDOW_AUTOSIZE);
cvShowImage ("Image1", src_img1);
cvShowImage ("Image2a", dst_img[0]);
cvShowImage ("Image2b", dst_img[1]);
cvShowImage ("Image2c", dst_img[2]);
cvWaitKey (0);
cvDestroyWindow ("Image1");
cvDestroyWindow ("Image2a");
cvDestroyWindow ("Image2b");
cvDestroyWindow ("Image2c");
cvReleaseImage (&src_img1);
cvReleaseImage (&src_img2);
cvReleaseImage (&dst_img[0]);
cvReleaseImage (&dst_img[1]);
cvReleaseImage (&dst_img[2]);
return 0;
}
693 :
デフォルトの名無しさん:2009/11/18(水) 17:31:02
2分割になってしまいましたが
上のプログラムはopencvのマッチングのサンプルなんですが
一致度を示すプログラムと
一致度の表示部分を教えてください。
>>693 とりあえず日本語のリファレンスマニュアルぐらい読め。
どうせこのコードに使われている関数はほぼ使うんだから
それと最初のレス番を名前欄にかいてくれ
695 :
デフォルトの名無しさん:2009/11/18(水) 19:03:29
そんな暇ねーから書き込んでんだろうが
∧_∧
⊂(・∀・ )つ-、 できたら言ってね〜
/// /_/:::::/
|:::|/⊂ヽノ|:::| /」
/ ̄ ̄旦 ̄ ̄ ̄/|
/______/ | |
| |-----------| |
プログラミング初心者はスレ違い
699 :
685:2009/11/19(木) 11:58:42
>>686 cvFindContoursで取った輪郭からは輪郭線の座標値しか取り出せないと思っていたのですが。
そうではなくてその輪郭線で囲まれた全ての座標値,つまり輪郭で型取られた物体の全ての座標がほしいです。
>>699 塗りつぶして全座標をチェックすりゃいいんじゃね。
cvFindContoursで得た輪郭なら元画像がすでにそうなってる(2値化)気もするが
701 :
デフォルトの名無しさん:2009/11/19(木) 12:57:06
visualstudio2008(vc9)とopencv2.0を使い始めたのですが
IplImageとBITMAPの相互変換って可能ですか?
BitmapのデータをIplImageのimageDataに入れてやればおk
>>699 drawcontourの引数で塗りつぶすオプションにして、それ出力したIpl構造体スキャンすればよくね?
704 :
703:2009/11/19(木) 13:29:04
Windows7 64bitにIPLがインストール出来なくて困ったちゃん
XPモードにインストールしてインストールイメージをコピーすれば・・・
いい加減にIPPにしろと言われそうだな(笑
GIMPのファジー選択のようなプログラムをOpenCVを用いて組みたいのですが、可能なのでしょうか?
皆目、見当がつかず困っていまして・・・
707 :
デフォルトの名無しさん:2009/11/24(火) 05:32:51
GIMPってソースあるんじゃないの?
GIMPはGPLなのでソースを見るの禁止されてるのです
代わりに見てここで教えればいいのか。これビジネスになるなw
>>709 MSのIronRubyチームはそんな感じのことしてたらしいね。
711 :
デフォルトの名無しさん:2009/11/25(水) 14:47:00
>>659 です。
たびたび失礼いたします。
鳥瞰図を真上から表示するには、
アフィン変換か射影変換、どちらが適しているのでしょうか?
また画像の頂点座標を求めなくてはならないのでしょうか?
ご意見よろしくお願いします。
>>711 画像処理の本、一冊ぐらい読んでからやった方がいいんじゃないか?
そういう検討も含めての卒論と思います。
(それぞれのメリットデメリット調べて書く)
レベルの低い卒論だな
OpenCV2.0を使ってカメラ二台を使ってリアルタイム動画処理をしようと思ったのですが
1台は画像を取り込む事が出来たのですが二台目が出来ません
OpenCVでは複数台のカメラからの取得は無理なのでしょうか?
OpenCVのサイトに書いてある。
Capture *capture = cvCaptureFromCAM(-1)でカメラ選択のダイアログまで出るのですが
選択したあともcaptureがNULLになったままで困っています
そのカメラはムービーメーカーや専用ソフトでも反応はしているのですが…
何か原因などありましたら教えてください
ソース貼れ
要所だけ抜き出すとこんな感じです
-1が返ってきて終了します
別のカメラだと正常に動作するのでコードの問題ではないような気がします
OpenCVでは使えないカメラなのかもしれません
#include <stdio.h>
#include <highgui.h>
int main(void){
int key;
CvCapture *capture;
IplImage *frameImage;
capture = cvCaptureFromCAM(-1);
if (capture == NULL ) {
printf( "カメラが見つかりません\n" );
return -1;
}
cvNamedWindow("Image", CV_WINDOW_AUTOSIZE );
while ( 1 ) {
frameImage = cvQueryFrame( capture );
cvShowImage("Image", frameImage );
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}
}
cvReleaseCapture( &capture );
cvDestroyWindow( windowNameCapture );
return 0;
}
じゃぁカメラの問題なんじゃない。
なんでカメラの機種名を書かないの?
ソース貼る時ってやっぱり pastebin
みたなののほうが見やすいよな
C#でも使えるの?
ARGOのLuシリーズです
>>719 OpenCVでは使えないカメラかもしれないってどういうことだ?
その2台目のカメラ一台で認識されるかは試した?
728 :
デフォルトの名無しさん:2009/11/28(土) 15:26:07
OpenCvSharpでの質問なんですが
USBカメラの映像を取得するプログラムがうまく動きません
でも、まったく動かないわけではなく、たまに(ソースを変更して無くても)うまくいきます
具体的にはうまくいくとき→ちゃんと映像が表示される
失敗するとき→真っ黒の画面に色の付いたドットが10個ぐらい並ぶ
って感じです
カメラの起動(?)に時間がかかるのかと思い途中にSleepを入れてみても改善しませんでした
また、他のデバイス(SCFH、HPwebcam(USBカメラの映像を加工するソフト))を指定した場合はうまく動作しました。
切り分けのためにC++で試そうとも思ったのですが、VC++を使ったことが無くコンパイルすら通らない状態です
ソースは
ttp://www1.axfc.net/uploader/Sc/so/58903.txt に上げておきました
どのようにすれば確実に動くのでしょうか?
729 :
デフォルトの名無しさん:2009/11/28(土) 15:36:37
ごめんなさい
Sleepの時間を長めにして、待機する所をいろいろ変えてみたところ
CvCapture capture = CvCapture.FromCamera(0);
System.Threading.Thread.Sleep(500);
とするとかなり確実に動作するようになりました(でもたまーに失敗する)
実用上問題ないので、コレで行きます
ご迷惑おかけしました
OpenCvSharp 面白そうですね。とりあえずダウンロードしてみるよ。PCの肥やしになる可能性が高いけどね
cvCreateImage で、
cvCreateImage(cvSize(16384, 16384), IPL_DEPTH_8U, 1);
のようにピクセル指定では 16384ピクセル×16384ピクセル 以上は作成できないみたいですが
それ以上のピクセルサイズを扱う方法はないでしょうか?
cvLoadImage("ファイル名", CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
では、それ以上でもロードできました。
じゃあcvCreateImage使わないでcvLoadImageでダミーの真っ白な巨大画像をよみこんでおいて、そこに書き込んでいけばいいんじゃないの?
作成できるんじゃないの?
cvLoadImageの中でcvCreateImage使ってるようだが
32768x32768x8bitで1GB。
Win32の1プロセスは2GBまでということなので
他の用途に確保した部分とあわせて、そこらへんの制限にかかってるのかな?
64bitでやれば無問題
v1.0だと1度にcvAllocでアロケーションできる領域はCV_MAX_ALLOC_SIZE までで、普通は1GB
またメモリーが足りなければOut of Memoryのエラーがでるはず
2.0だと例外投げるように変わってるのかな?
どっちにしろ
>>731とは違う話かと
737 :
デフォルトの名無しさん:2009/11/30(月) 15:23:12
OpenCVについて質問なんですが
2値化した画像の白い画素(255,255,255)の量を行単位,列単位で調べたいんですが
何かいい関数とかありますか?
それぐらい自分でかけよ
画像に別の画像を回転して貼り付けってないですか?
>>737 cvGetReal2Dで全行列調べればおk
cvSmooth の param1とparam2って
16以上入れちゃだめなの?
CV_GAUSSIAN,CV_BLUR,CV_BLUR_NO_SCALE,CV_MEDIAN
で確認
CMUの顔画像の学習を行っているのですが、
haartrainingの学習がステージ8で止まってしまいます。
条件
ポジティブ画像 2429 ネガティブ画像 44548
いずれも 19*19画素のjpgファイル。
ステージ7までは1時間弱で進んだのですが、そこから先は、12時間以上たっても
学習が進みません。
http://gihyo.jp/dev/feature/01/opencv/0004 ↑で取り上げられている学習は、2,30分ほどで終わったのですが。
744 :
743:2009/12/02(水) 10:51:05
訂正
ネガティブ画像
×44548
○4548
OS:vista64bit CPU Core2Duo
[email protected] haartrainingは時間がかかるので、マルチコア+x64対応でコンパイルしてみた。
さっきのCMUも、少しは学習速度が上がったかな?
OpenCV2.0 のcmakeがうまく動かない
普通に
./configure
make install
だけじゃだめなのか
写真から目の検出をしたいんだが
大きさとか角度とかばらばらな場合はどうやるのが一番いいんですかね?
>>747 顔方向推定して方向ごとの顔検出器で顔の位置と大きさと角度を検出して
それから目の検出をすればでできると思うけど。
OpenCVを使えば簡単にできますという内容ではないな。
>>746 thx
確かに、学習画像の解像度が低かったり、変わり映えのしない
画像が多かったかも。
顔検出とかをやってみると、壁のシミや木の枝とかの
偽陽性検出が発生することがしばしばあるんで、
そのあたりも入れてみようかなー。
>>750 せめてコンパイラーのバージョンくらいは書いてくれよ
ただ単に画像数を増やせばいいってわけじゃないんだろうな
検出したい画像だけに含まれる特徴を自分で考えて、誤り画像にはそれが含まれないようなのを
意識的に増やすとうまくいくんじゃないか?
例えばある文字を検出したいとして、他の文字にも引っかかるんだったら、その違う文字を誤り画像
として多く入れとくとか。
これが全自動で出来ればどんどん精度が高くなるかもしれないぜ
1、 画像学習をする
2、 検出結果の画像中で正解のところをクリックしたら、その他の誤り検出領域を画像として書き出す
3、 書き出された画像を誤り画像に追加する
4、 1に戻ってやり直し
輪郭領域の面積を求めようと思っています。
▼のような矩形の場合、例えば以下のようなプログラムで取得できますが
double area;
IplImage *img = 0;
CvMemStorage *storage = cvCreateMemStorage (0);
CvSeq *points;
CvPoint pt;
points = cvCreateSeq (CV_SEQ_POLYLINE, sizeof (CvSeq), sizeof (CvPoint), storage);
pt.x = 79;
pt.y = 59;
cvSeqPush(points, &pt);
pt.x = 132;
pt.y = 112;
cvSeqPush(points, &pt);
pt.x = 174;
pt.y = 46;
cvSeqPush(points, &pt);
area = cvContourArea (points, CV_WHOLE_SEQ);
▼
▲ のような輪郭がクロスするような形状の場合、輪郭内の面積をうまく取得できません。
何か、良い方法があれば教えてください。
double area;
IplImage *img = 0;
CvMemStorage *storage = cvCreateMemStorage (0);
CvSeq *points;
CvPoint pt;
points = cvCreateSeq (CV_SEQ_POLYLINE, sizeof (CvSeq), sizeof (CvPoint), storage);
pt.x = 143;
pt.y = 119;
cvSeqPush(points, &pt);
pt.x = 214;
pt.y = 119;
cvSeqPush(points, &pt);
pt.x = 132;
pt.y = 211;
cvSeqPush(points, &pt);
pt.x = 211;
pt.y = 210;
cvSeqPush(points, &pt);
area = cvContourArea (points, CV_WHOLE_SEQ);
757 :
747:2009/12/05(土) 12:20:11
>>748 なるほどそういう方法もありますね。
いや目だけじゃなくて手とかいろんなもんを最終的にやりたくて
画像検索ソフトを作ろうと思ってまして、写真を自動的に分類するみたいな
だから出来るだけ多くの情報を拾い出したいわけでして
調べたらheerlerningってので学習させればいいんですね
サンプルを集めろってことなんだけど
画像のどの座標がポジティブでどの座標がネガティブでとか
手作業でやるのは無理っぽいんですがね
せめて画像ビューアーにそういう座標指定機能のついたフリーソフトとかないですかね?
最終的に学習用のテキストファイルとかも出力してくれるような
まあ自分で作ってもいいんだけど
>>756 まず各線分同士が交差するかをチェック
交差する場合交点を求め新たな頂点とする
各領域で面積を求め足し合わせる
>>759 いやいやそこまではしませんよ
せいぜい顔の目の相対位置から個人を特定したり
手とか足の位置が分かれば体の場所もわかるから服の色とかも拾えるかなと考えてるだけです
>>760 それでも実用まで考えるとかなり難しいよ。
顔と目、体全体はOpenCVにサンプルがついているからそのあたりから試せばいい。
OpenCV2.0のdata\haarcascadesにcvHaarDetectObjects()用の学習済みのデータが入っている。
samples\c\peopledetect.cppには歩行者検出のサンプルがある。
okaoVision
初心者です
Windows7 Ultimate(64bit) +VisualStudio2005の環境で
ttp://wtpage.info/program/opencv.html の内容にしたがって進めていたのですが
cvhaartrainingのプラットフォームで<新規作成...>を選択
という部分で選択肢にx64の項目が出てきません
これはどうしてなのでしょうか?
>>763 それはOpenCVに限った話?
普通に新規作成したプロジェクトでも出ないのならスレ違い。
もし自分で作成したプロジェクトでもでなくてかつEEでもなかったら、
VS2005インストール時にデフォルトでは外されてる64bitのチェック入れなかったんだろうけど。
>>764 自分で作ったものではx64という選択肢はあります
ちなみにEEとは何でしょうか・・・・?
>>761 おお、素晴らしい
ぜんぜん気づかなかった、これだけあれば十分な気がする
>>765 ちょっとやってみたけどx64はもう作成済みで、新規作成には出てこないみたいだけど?
新規作成選ぶとこにすでにx64ないか?
と、作成済みのプロジェクトと未作成のとあるんだな。
他のプロジェクトにも一切x64出てこない?
>>764,767,768
おっしゃるとおりでした。今再インストールして64ビットのチェック入れたら
無事に表示されました。ありがとうございました。
OpenCV1.0を使ったアプリをJavaで作っていて、
OpenCV Processing LibraryのjarをEclipceに読み込ませて作っています。
これをjarで固めてLinux上で動かしたいんですが、
LinuxにOpenCVをインストール&パス設定しただけで、動作するものなのでしょうか?
ライブラリのDLLとかもLinux上に上げなければいけないのでしょうか?
やってみれば?
Java初心者はスレ違い
2枚の画像で変化のあった部分は変化後(カラー)で,変化がなかった部分は黒く表示したいんですが
どういった方法が適しているでしょうか?ご教示お願いできませんでしょうか.
差分とって閾値処理 CV_THRESH_TOZERO
このソフトは工場での製品検査に利用出来ますか。
777 :
デフォルトの名無しさん:2009/12/15(火) 20:43:32
はい
cvRect型の構造体の各座標を結んで矩形を描いてくれる関数なんてあったりしますでしょうかー
>>778 各座標を結んでっていうのがどういう風に結ぶのかわからんが普通に矩形描くならcvRectangleでできるはず
opencvsharp1.0での、2値画像の輪郭抽出ってどうやればいいですか?
>>775 ご回答ありがとうございます。
差分処理をした画像を閾値処理するということでよろしいでしょうか。
試したところ、差分処理後の画像は変化後の画像とはまた異なってしまうようなので,
変化があった部分は変化後そのままを表示させたいのですが。
何かよい方法ありますでしょうか?
元画像とandで合成すれば良いんで無い?
手元にPC無いから慣だけど
783 :
778:2009/12/16(水) 15:17:02
ありがとうございます!
opencv2.0なのですが、64bitのmingwでmakeできた方いますか?
785 :
デフォルトの名無しさん:2009/12/22(火) 11:09:02
opencv2.0で追加された新しい関数のサンプルコードってどこかないですか?(英語でも可)
限定的に言えばcvExtractMSERを使いたいんだが、引数がイマイチ?で・・・。
2.0で追加された新しい関数のお勧めってどれだ
python ctypes-opencvは2.0でも使えるんだろうか
787 :
デフォルトの名無しさん:2009/12/24(木) 23:33:27
質問です。
processingでopenCVを動かしたくて、環境を作りました。
とりあえずビデオ画像をcaptureしたかったので
ttp://ubaa.net/shared/processing/opencv/opencv_cascade.html のコードを動かしてみましたが
描画の窓にカメラの画像が出てきません。
コンパイル自体は通ってるので
おそらくリンカエラーなど、環境構築でミスってることはないと思います。
また、カメラも認識出来ています。
(プログラムを走らせるとカメラのライトが点灯する)
Versionは
processing 1.0.7
OpenCV1.0
OSはVistaです。
どなたか、ご存知の方いらっしゃったらよろしくお願いします。
789 :
デフォルトの名無しさん:2009/12/27(日) 20:42:22
>>788 レス頂きありがとうございます。
がいしゅつ(なぜか変換ry)だったのですね。
コレを見る限り、
生のOpenCVではcapture用にオブジェクトを生成しているのでしょうか?
Processingに関しては、内部を詳しく確認していないのでわかりませんが
ビデオをキャプチャする際はOpenCVクラスのオブジェクトを生成し、
そのなかのcaptureメソッドを呼んでいるようでしたので
captureメソッドを呼ぶ前にdelay(Sleepと同様)を入れてみました。
がやはりだめでした...
ほかに考えられる原因はどんなものがあるでしょうか?
1.0だと結構カメラ相性が酷かった気がする.
昔はカメラ画像のキャプチャはDirectShowでやって、
それをOpenCVに渡して画像処理していた覚えがある.
791 :
デフォルトの名無しさん:2010/01/04(月) 00:26:04
haartraining.exeで学習していると
下のような状態から全く動かなくなってしまいます。
原因に心当たりのある方がいらっしゃったらよろしくお願いします。
Tree Classifier
Stage
+---+---+---+---+---+
| 0| 1| 2| 3| 4|
+---+---+---+---+---+
0---1---2---3---4
Parent node: 4
*** 1 cluster ***
POS: 395 400 0.987500 ←ここから動かない
792 :
デフォルトの名無しさん:2010/01/04(月) 21:34:16
>>790 レスありがとうございます。
実はOpenCV2.0はインストール済みなのですが
うまく動かなかったため1.0で試そうとしています。
(リンカエラーがでる。
UnsatifiedLinkError: hypermedia.video.OpenCV.capture(|||)V)
すいません、正直よくわからなかったので、ここは放置していました。
ここがうまくいけば2.0のほうが安定して動作するのでしょうか?
>>793 最新版ってのが2,0なら1.1preまでの方法じゃうまくいかんよ。
参考にしたいソースがあるんだったら同じバージョンのやつを落としてきてやった方がいい。
>>793 2.0からはVC用のlibがついてないのでソースコードから自分でコンパイルしないといけない
797 :
デフォルトの名無しさん:2010/01/16(土) 14:54:35
一つだけ困っている事があるのですが,ビデオライタが上手く扱えません.
今,読み込んだ動画を画像処理して,ビデオライタで出力しているのですが,フレーム率
の値がおかしな事になっています.
プログラムには,
vw1 = cvCreateVideoWriter("output1.avi", -1, 30, cvSize (f_width, f_height),1);
と記述していて,30フレーム/秒の動画が出力されるはずなのですが,500フレーム/秒の動画
が出力されます. 記述の仕方が間違っているのでしょうか?
798 :
デフォルトの名無しさん:2010/01/16(土) 20:25:36
マルチうぜえ
マジだw
サンプル画像は添付されてないのか
ワード文書なんて怖くて開けねえ
初期化と終了が対応していないw
CMakeでビルドができません。
Configureを押すと、本来コンパイラの選択に行くらしいのですが、以下のエラー
で止まります。
CMake Error: your C compiler: "bcc32" was not found. Please set CMAKE_C_COMPILER to a valid compiler path or name.
CMake Error: your CXX compiler: "bcc32" was not found. Please set CMAKE_CXX_COMPILER to a valid compiler path or name.
というエラーが起きます。これらの設定ってどうやればいいでしょうか
あ、環境はXPです。
解決しました。どうやら最初のConfigure時にコンパイラ名を間違えてしまって
たのが原因みたいでした。一度キャッシュファイルが作られると、ずっと同じ
設定になってしまうようなので、作られたフォルダを削除したら上手くいきました。
質問させてください.
ロジクールのUSB接続のカメラで表示するプログラムをOpenCV1.0で作成し,正常に動作していたのですが
PCを変更したところ,プログラム自体は動作するのですが,カメラからの入力は一面黒く表示されるようになってしまいました.
プログラムを動かすとカメラも光るので,認識はされていると思うのですが.(
>>787さんと同現象かもしれません)
原因などご存知の方いらっしゃいますか?
>>807 Vistaだったりしませんか?
VistaだとOpenCVはカメラ画像取得方法がちょっと違うやり方でやらないと出来ないので、ぐぐればでてきますよ
質問です
ROIを用いてオプティカルフローを使おうとするとint dx = (int)cvGetReal2D(velx0,i,j)の部分で
one of arguments' values is out of range(index is out of range) in Function cvPtr2Dのエラーがでます。
対処法の方分かる方いらっしゃったら教えてください。
自己解決しました
失礼しました
OPENCVのサイトからwindows版をdownloadしようとすると
ブラウザが落ちるんですが、俺だけ?
はい
>>812 使ってるブラウザが悪いんじゃね?何使ってるか知らんが。
>>1にStructure from motionとは書いてあるけど
実用的な関数ってあるんだろうか・・・・
opencv2.0のPoint型で表される3chの画素の値を直接操作するときはどう代入すればいいんでしょうか?
Point p;
mat.at<uchar>(p) = ここの部分;
1.1のhaartraining.exeってバグがあるのですか?
エラー吐かれて進めません.
それってerrorって出てくるやつでしょう。この場合「誤差」って意味じゃないの。
学習はとっても時間がかかるよ
821 :
デフォルトの名無しさん:2010/01/26(火) 20:20:07
意味がわからん
これじゃダメなのか
using namespace cv;
Mat_<Vec3b> img = imread("img1.bmp");
for(int i = 0; i < img.rows; i++)
for(int j = 0; j < img.cols; j++)
img(i,j)[2] ^= (uchar)(i ^ j);
cv::namedWindow("Image", CV_WINDOW_AUTOSIZE);
cv::imshow("Image", img);
cv::waitKey(0);
あ、Pointなのか
>>820と等価なはず
using namespace cv;
Mat img = imread("img1.bmp");
for(int i = 0; i < img.rows; i++){
for(int j = 0; j < img.cols; j++){
Point p = Point(j,i);
img.at<Vec3b>(p)[0] = saturate_cast<uchar>( img.at<Vec3b>(p)[0] * 6 + 10 );
img.at<Vec3b>(p)[2] = 0;
}
}
823 :
デフォルトの名無しさん:2010/01/27(水) 14:00:19
ステンシル値の読み込みがうまくいかないのですが、どのように書けばいいのでしょうか?
// ステンシル値格納用配列
buf_stencil = new int[xsize*ysize];
for(int i=0; i<xsize*ysize; i++){
buf_stencil[i] = 0;
}
glReadPixels(0, 0, xsize, ysize, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, buf_stencil);
/*** 配列はbuf_stencil[xsize*(ysize-y-1) + x] ***/
for(int y=0; y < ysize; y++){
for(int x=0; x < xsize; x++){
if( buf_stencil[xsize*(ysize-y-1) + x]==1){ /*ステンシル値をチェック*/
/*** 除去処理 ***/
if (imgNIN->imageData[imgNIN->widthStep * y + x]==0) {
img->imageData[img->widthStep * (y) + (x)*3] = imgCLO->imageData[img->widthStep * (y) + (x)*3];
img->imageData[img->widthStep * (y) + (x)*3 + 1] = imgCLO->imageData[img->widthStep * (y) + (x)*3 + 1];
img->imageData[img->widthStep * (y) + (x)*3 + 2] = imgCLO->imageData[img->widthStep * (y) + (x)*3 + 2];
}
}
}
}
OpenCVをモバイル(WindowsCE)上で使用したいんですが、
単純にOpenCVのプロジェクトのプラットフォームを
モバイルに変更してもエラーが出てコンパイルできません。
モバイル上で利用するのは無理ですか?
Operating System:
32-bit MS Windows (95/98), 32-bit MS Windows (NT/2000/XP), All 32-bit MS Windows (95/98/NT/2000/XP),
All POSIX (Linux/BSD/UNIX-like OSes),
OS X, Linux, Win2K, WinXP
そこをなんとかと思ったけどやっぱり無理ですか…
>>823 どう上手くいかないのかぐらい書けよ…。
>>819-822 返事が遅くなりました、できました(*´∀`*)
c++と2.0に慣れてないもので、これから勉強します…
ありがとうございました!
829 :
824:2010/01/28(木) 13:21:43
2.0じゃなくて1.0ならモバイル上でも使用できた。
highguiあたりはちゃんと動くか分からないけど。
830 :
デフォルトの名無しさん:2010/01/28(木) 17:54:42
CVの関数を用いない2値化の書き方を教えてください。
#define TH 128
for (i = 0; i < img.size; ++i) img.data[i] = img.data[i] > TH ? 255:0;
ひょっとして2.0て変な風にc++とりこんじゃったの?
純粋Cなのがよかったのに
行列の加減乗除するためにアホみたいに一時行列確保して
後でcvReleaseMatしまくるのが無くなっただけでもC++に移行した価値はあると思うんだけどなぁ
元々純粋なCじゃなくて、ただのベターC的C++だったしな。
今の方がいくらかマシ。
835 :
デフォルトの名無しさん:2010/01/29(金) 08:38:18
createsample.exeで-infoを使って複数枚の正解画像から正解サンプル作る時の質問なんだが、
これって例えば4枚の正解画像しか用意してなかったら、4つの正解サンプルしか作られないの?
-imgの時みたいに4枚の正解画像から7000個の正解サンプルとかはできないの?
ちなみにコマンドは
createsamples.exe -info positive.txt -vec positive.vec -num 7000 -bgcolor 255 -w 24 -h 24
positive.txtには4枚の正解画像のパスと位置を記してある。
このコマンドやったら4つの正解サンプルだけのvecファイル作るんだが・・・。
836 :
デフォルトの名無しさん:2010/01/29(金) 15:07:53
for文で画像全体を走査し、if文で、
2値化した画像の画素値が0(黒)の部分だったら元画像を右に+5のように少しずれて、
そのずれた先がまた黒だったら、今度は元画像を下に+5ずれた部分から画素を取得する、
以下、その繰り返し・・・
というようなif文の書き方はどのように書けば良いのでしょうか?
画素値はIplImageで取得しています。
for(int y=0; y < ysize; y++){
for(int x=0; x < xsize; x++){
if (imgNIN->imageData[imgNIN->widthStep * y + x]==0) {
img->imageData[img->widthStep * (y) + (x)*3] = imgNOR->imageData[img->widthStep * (y) + (x+5)*3];
img->imageData[img->widthStep * (y) + (x)*3 + 1] = imgNOR->imageData[img->widthStep * (y) + (x+5)*3 + 1];
img->imageData[img->widthStep * (y) + (x)*3 + 2] = imgNOR->imageData[img->widthStep * (y) + (x+5)*3 + 2];
}
}
}
0以外が見つかるか範囲外になるまで繰り返すのであれば、もう一段ループが必要だろ
838 :
デフォルトの名無しさん:2010/01/29(金) 17:58:46
ループというのは、もう一つfor文で回すということですか?
それとも、if文を入れ子で使うということですか?
>以下、その繰り返し・・・
この「繰り返し」がループだろう
while(見つかるまで)
if (そこは白){成功;break;}
else{右だか下だか移動}
うまくやったら一回走査するだけでも行けそうなんだが
処理速度に拘らなければどーでもいいか。
>>835 4枚の画像に4つの正解しかないなら無理だと思うけど、そうじゃないなら
infoのファイルの矩形の数を7000に増やせばいいんじゃない?
842 :
デフォルトの名無しさん:2010/01/29(金) 22:01:30
for文で全画素を走査する中でwhile文を書き、その中にif文で黒ならばと入れ子でif文でそこが白なら成功でbreak。
失敗なら、右、左、上、下などの場合分けをelseで書く感じでしょうか?
elseだと4回分(右、左、上、下)whileを書くのでしょうか?
また、見つかるまで、とはどのような継続条件式なのでしょうか?
for(y座標を走査)
for(x座標を走査)
while(見つかるまで?←)
if(そこが黒ならば)
if(そこが白ならば){成功;break}
else{右に移動}
while
if
else{左に移動}
・
・
・
日本語BASICかと思った
>>842 左とか上とか初出なんだけど
I(x,y) → I(x+5,y) → I(x+5,y+5) → I(x+10,y+5) → I(x+10,y+10) → ...
の順に非0の画素を探すんじゃないのか
while(注目画素の画素値が0) {
注目画素を左または下に交互に移動
}
正直何が言いたいのかよくわからない
さっきは右と下の繰り返しって言ってたのに、左とか上とか出てきたし
846 :
844:2010/01/29(金) 23:10:41
> 注目画素を左または下に交互に移動
左じゃなくて右ね。つられて間違えてしまった
847 :
デフォルトの名無しさん:2010/01/29(金) 23:34:55
大変困ってます。誰か助けてください。
今、単純に動画を再生するプログラムを作りました。
1GBくらいの動画なら再生はできるのですが、データサイズが大きくなると(10GBくらい)途中で再生が
止まってしまいます。プログラムはエラーが出ず、自然終了するので原因が分かりません。
誰か何か知っている方いらっしゃいませんか?
>プログラムはエラーが出ず、自然終了
?
849 :
デフォルトの名無しさん:2010/01/30(土) 02:11:03
848さんへ
あたかも、動画をすべて再生したかのようにプログラムが終了してしまいます。
コマンドプロンプトには、”続行するには何かキーを押してください...”と表示されています。
具体的に何をやってんのかさっぱり分からんw
cvCreateFileCaptureで取り込んでcvShowImageしてるだけなん?
フレーム数数えたりしてるならそこがintなんかになっててそれが溢れたとか
いや、C#でしか触ってないので想像だし
コレでエラー吐かずに終了するのかも知らないけど
852 :
デフォルトの名無しさん:2010/01/30(土) 12:37:49
853 :
デフォルトの名無しさん:2010/01/30(土) 21:26:06
チャンネル数1の画像(グレースケール画像、実際は動画の1F)を減色したいんですが
単に決まった値(今回は4値化したいので64,128,192)で分けれればいいので
クラスタリング?(よく分からない)は必要ないと考えて
ttp://d.hatena.ne.jp/aidiary/20091003/1254574041 を参考にピクセルごとに減色するコードを書いたのです。
でも、実行してみると5fps程度しか出ないぐらい遅くて使い物にならなかったのです。
こういった場合どう処理するのがいいんでしょうか・・・
考え方だけでもいいので教えていただきたいです。
なお、OpenCVは.net用ラッパーOpenCvSharpを使っていますが、普通のCのコードでもありがたいです。
854 :
デフォルトの名無しさん:2010/01/30(土) 21:34:58
ごめんなさい
自己解決しました。
一応簡単に方法を書いておくと、
Thresholdで、各閾値で256/4=64と0の二値に変換(一番明るいところは63と0)
それら4つをaddすることで4値化できました。(たぶん)
855 :
デフォルトの名無しさん:2010/01/30(土) 21:40:58
あ、うまく行ったと思ったらうまく行ってませんでした
でもこの方法でどうにかなりそうなのでどうにかします。
等間隔の閾値(64,128,192)と出力値(0,85,170,255)でいいなら、
a/64*85 (aは整数値)
>>856 ありがとございます
それは1ピクセル毎って事ですよね?
こんなに綺麗に書けるとは気づきませんでしたが1ピクセル毎にやるとどうも遅いのです。。。
そして
>>854の方法でiを1〜3で回すとき
閾値を256/4*iでmax値を256/(4-1)にすることでうまく行きました
お騒がせしました。
Lutとか使うと早くなるとか?
入力値ごとに出力値が決まってるからLUTでいけそうだね。
cvLoadImageで画像をロードすると、
IplImageのimageDataが指す画像データは各ピクセルごとに、
B0 G0 R0 B1 G1 R1...
と値がならんでますよね?
これをcvCvtColor(BGR2HSV)と変換すると、
H0 S0 V0 H1 S1 V1...
となると考えていいんでしょうか?
はい
Hは0〜180なので注意
ありがとう
860です。
すいません、ここでふつふつと疑問がでてきました。
cvCvtColorでBGRからHSVに変更しても、
例えば下記のようにした場合、
画像は赤になってしまいます。
これでは、imageDataとピクセルデータの対応関係が、
HSV形式ではなくBGR形式のままなのではないでしょうか?
とんちんかんでしょうか・・・
cvCvtColor(img, img, CV_BGR2HSV);
for(y = 0; y < img->height; y++)
{
for(x = 0; x < img->width; x++)
{
img>imageData[img->widthStep * y + x * 3 + 0] = 0;//H?
img->imageData[img->widthStep * y + x * 3 + 1] = 0;//S?
img->imageData[img->widthStep * y + x * 3 + 2] = 255;//V?
}
}
BGRとして表示しちゃってるんじゃないのか
そのコードで白色になって欲しいなら
その後に
HSV2BGRして表示しないとだめじゃ無い?
確か表示(showimgだっけか?今手元にPC無いんで曖昧でごめん)の時はBGRとして表示してる筈だから
て言うかこの場合最初のCvtColorは無意味
CvtColorは各要素の値を指定どおりに変換してるから
例えば要素1,2,3が255,255,255のイメージをBGR2HSVしたら0,0,255になるんだと思う
cvShowImage()だな
あ、この場合Hは何でも良いので180かもしれない
まあ普通に考えりゃ0だと思うけど
みなさんありがとうございます。
cvShowImage関数の仕様に、ピクセルデータを強制的にBGR形式で表示するなんて書いてなかったですよ・・・
ハメ技きついなァ・・・・
まとめておきます。
BGR画像をHSV変換してピクセルデータを操作した後にcvShowImageで画面表示する方法
(1) cvCvtColor(image_in, image_out, BGR2HSV)
(2) imageDataはピクセルデータがH0 S0 V0 H1 S1 V1…が並んでいるので、そのように参照、変更を行う※
(3) cvCvtColor(image_in, image_out, HSV2BGR)
(4) cvShowImage(image_out)
※Hは通常の[0:360]タイプではなく、uchar用の[0:180]タイプなので、
Hの入力値を最大255最小0として、0〜255を0〜180に規格化する。
例 (uchar)(180.0*h/255.0);
870 :
デフォルトの名無しさん:2010/02/04(木) 08:58:43
WEBCAMで数字の羅列の画像を読み込んでそれを数字として認識させようとしているのですが、
(エアコンの温度表示をWEBCAMで読んで、それをリモートからログインして知ろうとしてます)
OpenCVを使うのは適切でしょうか?
871 :
デフォルトの名無しさん:2010/02/04(木) 09:14:49
>>870 あと書き忘れましたが、20個のエアコンの温度が4x5で並んでいるので、
それを一個づつ別々に認識させる必要があります。もう画像を取り込むところは
出来ていて、毎日人力でやっているのですが、これをなんとか自動化しようと
思っています。
どうかよろしくお願いします。
OpenCVはただのライブラリ
できるかどうかは自分次第
TCP/IP 接続出来るネットワーク温度計もあるしね
蝿とかゴキブリが遮って誤動作するんですねわかります
>>870 数字の位置は固定だろうから、
数字の判定は難しくないと思うよ.
画像のマッチングだけだし.
だけどその用途なら
>>873の方がおすすめかも.
いやエアコンの温度表示は現在の温度じゃなくて設定温度でしょ?
エアコン20台って・・・ホテルの管理人か?
878 :
デフォルトの名無しさん:2010/02/04(木) 18:17:35
ありがとうございます。OpenCVで画像取得はできたのですが、JPEGやPNGなどの画像ファイルに
書き出せません。どうやればいいでしょうか?
879 :
デフォルトの名無しさん:2010/02/04(木) 18:25:45
できました。
cvSaveImage("XXX.jpg", IplImageポインタ)
とやると、拡張子をみて勝手にJPGで保存してくれるんですね。
>>871 完全に固定、7セグの数字、周りの明るさもあまり変化しないなら
2値化した後数字の特定の領域の値読むだけで何とかなるかも
881 :
デフォルトの名無しさん:2010/02/04(木) 19:54:00
とりあえずOCRでやってみます。
普通のOCRだとエアコンなんかのデジタル数字の認識って出来なそうなんだが・・・
883 :
デフォルトの名無しさん:2010/02/04(木) 22:20:32
>>852 ありがとう。
後一つ気になったんだけど、createsamples.exeの引数で背景を指定できるんだが、
この背景って精度上げるには指定すべき?
指定するなら背景ってどんな背景にしたらいいんだ?
実際に撮影する時の背景だけでいいのかな?
それともナイアガラの滝みたいに実際の撮影ではありえない背景とかも指定しといた方がいい?
>>883 createsamplesの背景は透明色をきれいに設定しないと
人工的になってしまいそうだったので使ったことないけど
指定するなら検出対象の背景としてありえる範囲の画像でいいと思う。
自分の場合は2000枚くらいは自分で用意してそれを5倍に増やす作業に使ったので
背景はその2000枚の中である程度ばらけていて問題にならなかった。
885 :
デフォルトの名無しさん:2010/02/05(金) 02:40:49
>>882 出来ませんでした。認識率がほぼゼロで、完全な白地に黒ではっきりと数字を書くと
ある程度認識できるみたいなので、OpenCVのcvThreshold()とかcvSmooth()とかで
いろいろフィルターを掛けてるのですが、エアコンの表示って、グレイの地に黒色で数字が
書いてありますよね。なので、全滅です。かりに出来たとしても、OCRを使うやり方だと、ちょっと光の反射具合が
変化しただけでもアウトになりそう。
こんなに難しいとは思わなかったス。別なアイデアを探します。
886 :
デフォルトの名無しさん:2010/02/05(金) 10:15:52
>>884 ありがとうございます。
背景の色設定が難しそうだからやめときます。
それともう一つ質問です。
自分は手形状の分類器(チョキの形)を作ろうと思ってるんですけど
haartraining.exeで使用する不正解サンプルってどんな画像を中心に集めたらいいですか?
チョキの形をしている手が写ってなければ問題ないですかね?
グーの形とかパーの形としっかり区別したいんでそれらの画像も不正解に多めに入れといた方がいいのかな?
888 :
デフォルトの名無しさん:2010/02/05(金) 20:44:20
ウインドウズ上でIEEE1394カメラをOpenCVで動かしたいんですけど、無理なんですかね?
>>886 一番いいのは(あるなら)想定しているシーンで検出対象が写っている画像の
検出対象だけを近辺の色で塗りつぶした画像だけど正解画像を作るの同じくらいの
労力が必要になる。正解画像を作る過程で同時に作れると少し楽。
1枚の画像から複数の物体を検出する場合は
同時に写っている可能性があるなら他の背景よりも
信頼性のある不正解なので増やせばいいけど
もしジャンケンのようにどれかに決定したいなら
誤検出を気にするよりは数秒間投票を行って多数決で決めるなどのほうがいいと思う。
ただhaarlikeは形状の変化に弱いので
手を検出するならカメラからの視点をできるかぎり制限しないと難しいと思うよ。
890 :
デフォルトの名無しさん:2010/02/06(土) 15:50:38
>>889 ありがとうございます。
こちらの実験環境はデスクトップパソコンにカメラを固定しそこから物体検出するというものです。
なので背景画像は常に一定、カメラの視点も常に一定で行います。
とゆう事は不正解サンプルは様々な種類(屋外画像や検出非対称オブジェクトが写っている画像等)
を数千枚集めるのではなく、実験を行う時の背景画像1枚から数千枚切り出した画像を不正解サンプルにすべきという事でしょうか?
このような質問をさせていただいてますが、自分はどちらかというと誤検出を減らすというよりも
正解オブジェクト(今回の場合ではチョキの形)の認識率を増やしたいのです。
とゆうのも自分が考えているじゃんけん認識プログラムのアルゴリズムは
背景差分を行う
ラベリングによりスパイクノイズの除去
物体オブジェクトのROIを指定しその領域のみ物体認識を行う
なので、物体認識を行う場合の背景の誤認識は考えていません。
正解オブジェクト(今回はチョキ)が表示された時は確実にそれを認識する分類器を作成したいです。
一度自分なりに分類器を作成しましたがあまり精度が良くありませんでした。
誤検出を下げるよりも認識率を上げる良い方法があればアドバイスお願いします。
CvHistogram *hist; int max_idx; float max_value; など宣言し、
cvGetMinMaxHistValue(hist, &min_value, &max_value, &min_idx, &max_idx);
とし、printf("%d",max_idx);としたのですが、すべて0と表示されてしまいます。
ヒストグラムの最大値のインデックスを得る良い方法はないのでしょうか?
max_valueをprintfで表示しても5000〜100000の値が見れますし、サンプル通りヒストグラムを画像表示させてもきちんと表示されております。
>>890 物体検出は"物体オブジェクトのROIを指定し"の部分を機械的にするものだから
そこの次の段階なら認識だと思うのでhaartrainingを使うのは用途が微妙な気はする。
ROIの領域が必ず手でグーチョキパーの多クラス分類がしたいだけなら
Suppert Vector Machine等でやったほうがいいのでは。
http://opencv.jp/sample/svm.html 今のまま精度を上げたいなら
ROIの領域を正解画像が十分入るように広めにとることと
実験環境で分類器に入力されるのと同じ手の画像(背景差分して背景を塗りつぶしている?)を正解にすることと
createsamplesは2〜10倍に増やす用途に使って
1000枚くらいは実際の映像から切り出した画像を使うことだと思う。
チョキは指の開きを変えた正解画像がたくさん必要そう。
入力前に背景差分やラベリング等で加工しているなら
加工後の画像を正解や不正解に設定しないといけない。
893 :
デフォルトの名無しさん:2010/02/07(日) 14:30:59
>>892 ありがとうございます。
現段階ではグーチョキパーの3クラス分類ですが、
今後は手話における多クラス手形状認識を行う事を考えております。
SVMも参照させていただきましたが
SVMは多クラス分類においてはHaar-Like特徴による物体認識よりも精度が劣るとありましたので今回はHaar-Like特徴でやります。
精度向上に関してのアドバイスありがとうございます。
参考にさせていただき分類器の作成にとりかかります。
また、何かあればアドバイスの方おねがいいたします。
>>891 min_idx,max_idxには配列を渡すみたいだよ.
ただ,マニュアルを見てもなにが設定されるのか分からなかったので,
ソースコードを見たほうがいいと思う.
質問ですが、cvCalcOpticalFlowLKって勾配法のローカル法でしょうか?それともグローバル方でしょうか
>>894 有難うございます。
配列へのポインタについてですが、int (*max_idx)[100] = {0};などとして、cvGetMinMaxHistValueの引数にどのように記述すればよいのでしょうか?
宣言等が間違っていたら申し訳ありません。
動画処理について勉強中の素人プログラマです。
OpenCVでアルファチャンネル付きの動画を生成することは可能でしょうか?
またその場合気をつけることはありますか?
OpenCV アルファチャンネル AVI などでググっているのですが
なかなか思っている情報がみつかりません。
cvCreateImage で4チャンネルのイメージ空間を作って
cvCreateVideoWriter でライタを作るときにアルファチャンネルに対応したFOURCCを選んで
cvWriteFrame で書き込み(アルファチャンネルなしのときと同じ)
って思っているのですが、そもそもこの考え方に間違いがありますか?
899 :
デフォルトの名無しさん:2010/02/15(月) 09:24:19
haar-like特徴用いて機械学習を行っています。現在ポジティブ画像7000枚、ネガティブ画像3000枚使ってxmlファイルを作成しています。
もっとネガティブ画像を増やして学習を行いたいのですが、ネガ画像に使えそうな画像が大量にあるサイトなどはないでしょうか?
どなたか知っている方がいたら教えてください。
>>899 ネガ画像はcvNotで作れると思いました。
2chをクロールすれば
google
903 :
デフォルトの名無しさん:2010/02/16(火) 18:19:14
cvNotとはマスク画像を反転させる関数のことでしょうか?
できればネガ画像に即使えそうな画像ファイルが大量に置いてあるサイトについて教えていただきたいのですが…。
ちなみにポジ7000、ネガ3000で横顔を認識させているのですが、デフォルトで配られている正面顔認識用xmlファイルほど
赤丸がしっかり出せなくて困っています。
ちなみにminhitrateを0.999、maxfalsealarmを0.38で作成したので誤認識はほとんどありません。
赤丸を継続的に出すには画像枚数を増やせば良いのでは、と考えています。
誤認識を多少許したら?
作りたい物にもよるが認識されないよりは良いと思う
905 :
デフォルトの名無しさん:2010/02/16(火) 20:39:15
数秒間横顔を認識したらブラウザを起動させるようなアプリを作成しています。
認識はされるのですが赤丸が出たり消えたりの繰り返しでなかなか継続的に出てくれません。
なのでブラウザを起動させるのに多少時間がかかってしまいます。
もっと強いxmlファイルを作成できれば解決できると考えていますが…。
継続的に出ないって事は途中で消えるのか?
トラッキングすればいいだけでは
Haar-likeって顔検出だと思うんだけど、本当に顔検出ではなく顔認識なのか?
ネガを増やすことでは解決しないと思う。
横顔の定義を緩めたポジや撮影環境の悪いポジを増やしてロバストにしないと。
誤検出は増えても、検出位置を追跡していれば誤検出として処理することができる。
ちなみにデフォルトで配られている横顔検出用XMLはどうだったの?
haarcascade_profileface.xmlがそうだと思うけど。
910 :
デフォルトの名無しさん:2010/02/17(水) 08:49:44
デフォルトで配られている正面顔検出のxmlではちゃんと継続的に赤丸が出ます。
「継続的に出ない」というのは赤丸が出たり消えたりして点滅するような感じになってしまうということです。
撮影環境の悪いポジを増やすというのは納得できました。
横顔の定義を緩めたポジとはどのような画像のことでしょうか?
911 :
デフォルトの名無しさん:2010/02/17(水) 09:02:37
すいません間違えました。
デフォルトで配られているhaarcascade_profileface.xmlでは正面顔も検出されてしまい横顔のみを検出することはできないように思います。
かなり力技だが横顔+正面から正面引けば横顔だけ残るんじゃね?
>>910 赤丸が出たり消えたりするというのは
ビデオのフレームごとに横顔が検出されたりされなかったりしていて
つまり横顔の微妙な動きによって検出される横顔とされない横顔がある。
断続的に検出したいなら、今検出されていない横顔を検出しないといけない。
それで、微妙な動きで検出されなくなるのは、
ポジが統一され過ぎているせいではと思ったの。
断続的に検出したいフレームには
横顔だけど少し正面気味だとか下を向いてる顔があって
それを検出したいのにポジに入っていないのでは。
ただ今の状態で見逃しはあるものの大体検出できているなら
最初に横顔を検出してからN秒の間に横顔を検出したフレーム数のカウントを取って
それが閾値以上ならN秒間横顔を検出し続けたということにしてコマンドを実行したほうが
安定すると思うよ。
914 :
デフォルトの名無しさん:2010/02/18(木) 09:12:54
bool CDetectFaceFromCamera::drawCircle()のfor文にN回入ったらブラウザを起動させるといった感じでやっています。
ポジ画像は一枚の横顔画像からcreatesamplesで7000枚にして使用しています。
やはり1枚の画像→createsamplesで増やす、ではポジが統一されすぎてしまうのでしょうか?
だとしたら断続的に検出するには今検出されていない横顔を検出しないといけないというのは非常に納得できます。
初期の頃は微妙に角度の違う複数枚の画像を原画像に使用し、検出対象の座標をリストに作成しhaartrainingを行ったこともありましたが
検出対象の座標をどのようにしたら正確に得ることができるのかわからず、現在の1枚の画像→createsamplesで増やすという手法に切り替えました。
複数枚の原画像を使った手法についてアドバイスをいただけないでしょうか?
>ファイル名 0 0 画像の幅 画像の高さ
ファイル名 1 0 0 画像の幅 画像の高さ
点滅的になるなら積分すれば良いんじゃないかと思うが
918 :
デフォルトの名無しさん:2010/02/19(金) 08:53:44
アドバイスありがとうございます。
とりあえず微妙に角度や向きの異なった横顔画像をcreatesamplesで増やしmergevecでマージさせるという方法を試してみたいと思います。
919 :
デフォルトの名無しさん:2010/02/19(金) 19:35:07
>>919 そんなことしなくても
係数だけ見ればいい
921 :
デフォルトの名無しさん:2010/02/19(金) 20:46:42
2.0のvideowriterで無圧縮とmotionJPEGしかFourccを受け付けてくれない。
他のにするとFFMpegがエラーを吐く。
IndeoとかMSVCとか入ってないわけないんだが、どうしてだ??
CvMatを生成するとき
CvMat *mat = cvCreateMat(2, 2, CV_64FC1);
のように行数と列数を指定する必要があると思うのですが、行数があらかじめ分からないときはどうすればよいでしょうか。
vectorのpush_backのような感じで行を動的に追加していくことは可能ですか?
大きめにとる
動的コンテナならstd::vectorを使えってことだろ
いい方法かわからないけど一応解決したかも。
vector<float> data;
// dataにpush_back()でデータを詰め込む
int rows = data.size() / DIM; // DIMはデータの次元数なので割れば行数になる
int cols = DIM;
cout << rows << "x" << cols << endl;
CvMat samples;
cvInitMatHeader(&samples, rows, cols, CV_32FC1, &data[0]);
>>927 こいつ自体は知ってたけどこれの文法が分からん
cv::Matでやるにはどうしたらいいんだ
cvFindStereoCorrespondenceのことなんですが、多分、内部処理でマッチングに使う
それぞれのテンプレート画像を切り出してると思うのですが、このテンプレート画像の
サイズを変更ってできますか?
今、元画像を色抽出してcvFindStereoCorrespondenceをかけているのですが、テンプレート画像が
細かすぎて、うまくマッチングできないので、これをもっと粗くするほうほうを探しています。
>>927 メモリ表示してデータ型合わせたら見れるだろ
>>931 うん、今気づいた
だが
#array()の中身を
expr : ((double*)$c.data)[$i],
size : ($r==1)*$c.rows + ($r==0)*$c.cols,
rank : 2
にすればもっと行列っぽくなる。
>>932 mjdk!って思ってやってみたら
表示される値が違う(´・ω・`)ショボーン
934 :
932:2010/03/03(水) 15:41:51
936 :
デフォルトの名無しさん:2010/03/07(日) 23:42:39
( ´・ω・`)
OpenCV2.0のcvLoadImageで16bitカラーのtiff画像読み込んだら、
勝手に8bitカラーに圧縮して読み込まれてしまうようなんですけど、これは仕様ですか?
オンラインマニュアル見ても特に記載されていないので・・・。
ソースを秘匿したままでどうしろと?
なぞなぞの答えは第2引数を書いてない。では?
CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR
940 :
937:2010/03/09(火) 00:34:02
すいませんでした。
>>939 いえ、第2引数もそのように指定して、
IplImage* tmp = cvLoadImage("test.tif",CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
としても、tmp->depthがIPL_DEPTH_U8となっていて、実際にtmp->imageDataに格納されている
画素配列を確認しても8bitに変換されている状態でした。
サンプル画像は
http://dl.maptools.org/dl/libtiff/の pics-3.8.0.tar.gzのflower-rgb-contig-16.tifを使用しました。
あ、ちがったか。失礼。
PNGだと読めるみたいだけどtifだとダメみたいですね
grfmt_tiff.cpp見ると8bitにしか対応してないような気もする
サンプル画像数100でcreatesamples.exeを実行してるんですが、
3週間近く経っても実行完了しない。
サンプル画像の縦横比はそろえてるんだけどなぁ。
比だけでなく縦の長さ、横の長さ自体をそろえないとダメですかね?
それとももっと別の理由でしょうか。
createsamplesって一瞬で終わるものだぞ。
サイズはテキストに書いて指定する。
実際に3週間も待つとはずいぶんと気長な人だなあ
OpenCVを勉強しようと思ってEssential OpenCVって本を買ったら1.0を使用してたんだけど、1.0をダウンロードして使ったほうがいいのかな?
それとも2.0で使ってても問題無いですか?
946 :
138:2010/03/16(火) 02:08:10
とりあえず、1.1との違いが書いてあったので1.1で勉強してみることにしました。
Cなら2.0でもあまり変わらない
948 :
945:2010/03/17(水) 02:24:17
2.0を入れて本の通りにいくつかやってみましたが、特に問題は無さそうですね。
1.1と2.0は関数名とかも同じなのかな?
ほぼ同じ。
変わったものもあるけど、コンパイルエラーが出てからググれば大丈夫。
画像から任意の三角形を抜き出したいんだけど、マスクを使わずに
座標指定だけでやる方法ってある?
三角形から外接の四角形を作りX,Yの点ごとに点が三角形の中にあるか否かを判断し中なら取り出すとか
をやるくらいならマスクのほうがいいな
>>950 水平ラインごとに三角形内部の始点と終点座標を求めればOK。小学校の算数レベル。
マスクを使わずにってのはマスク画像を自分で用意せずにっていう意味だと勝手に解釈
ならマスク画像を3点の座標からopenCVで描けばいいよね
UbuntuでOpenCVやろうとしてるんですが、DVカメラ(所謂ハンディカム)からはキャプチャできないのでしょうか?
>>950 どうせ取り出すときにマスク範囲と同じ領域が
必要だからマスクのほうが効率いいんじゃない?
ctypes_opencvとopencv2.0に付属のpythonインターフェイスはどっちがお勧め?
openCVに付属してる奴は自分でCの関数書くとそれをpythonから簡単に読めなかった記憶あるんだけど
OpenCVデフォルトのpython interface生成方法がすごい変すぎる
なんでctypes使わないの?
OpenCVの癖のあるC++はVisual Studioでないと読めない
emacsでは無理なのか
OpenCV2.0をVisualStudioで使おうとcmakeからビルドしたら
サンプルプログラムの実行をVisualStudioからできない
コンパイルしたのを直接動かすことはできる
VisualStudioでデバックしながら実行したいのに
961 :
デフォルトの名無しさん:2010/04/03(土) 03:26:55
失礼します。
画像ファイルから動画を作りたいと思っているのですが、以下のプログラムを実行しても、最初の画像しか出てきません。
自分としては2枚目の画像が2秒後に出るように作ってみたつもりなのですが・・・。
また、コーデックで無圧縮AVIは使えるのでしょうか?//にしている部分を実行してみたところ、エラーになりました。
良かったら、どこが間違っているのか教えてください。
WindowsXPでOpenCV1.1preを使用しています。言語はC++/CLIです。
よろしくお願いします。
CvVideoWriter* rec;
CvSize sz;
sz = cvSize(640,480);
rec = cvCreateVideoWriter("D:\\Test.avi",CV_FOURCC('P','I','M','1'), 120, sz,1); // MPEG-1
// rec = cvCreateVideoWriter("D:\\Test.avi",CV_FOURCC('D','I','B',' '), 120, sz,1); // 無圧縮AVI?エラーになる
IplImage* img1 = cvLoadImage("D:\\tmp.bmp");
cvWriteFrame(rec,img1);
IplImage* img2 = cvLoadImage("D:\\tmp2.bmp");
cvWriteFrame(rec,img2);
cvReleaseImage(&img1);
cvReleaseImage(&img2);
962 :
961:2010/04/03(土) 19:10:12
いちおー自己解決しました。
MPEG-1コーデックが壊れていたらしいです。
>>955 1394以外だったらキャプチャボードが必要
964 :
デフォルトの名無しさん:2010/04/08(木) 02:21:21
OpenCV始めて1日目です
IplImage* img = cvLoadImage("CMYK.TIF", CV_LOAD_IMAGE_ANYCOLOR);
↑でフォトショで作ったCMYKのTIFF画像を読み込んだのですがimg->colorModelを参照するとなぜかRGBになっています
勝手にRGB変換されてしまうのでしょうか?CV_LOAD_IMAGE_ANYCOLORをつけているのですが・・・
OpenCVでCMYKを正しく扱うにはどうすればいいですか?
>>964 そのTIFF画像のRGBにCMYK時の色が付いてるんだろ
それってRGBに変換されてるってことじゃね
TIFF画像がCMYKで保存されているか調べる方が先だろ
RGBで読まれるだろ
いやなら変換しろ
ubuntu10.04はOepnCV2.0がパッケージで入るみたいだよ
VisualStudio2010出たみたいだけど
OpenCVは対応したのかな
OpenCV2.1には特に書いて無かったよな
まぁ2010でも問題無いだろう
VS2010は何かdllたりなくてビルド失敗するらしいとブログに書いてあった
そのブログがどこか分からんので何ともいえんが、
2010express単体だとopenmpライブラリ無くて使えないから
windowssdk7.1を待つしかないな
cmakeのオプションでopenmpはずせるよ
976 :
デフォルトの名無しさん:2010/04/15(木) 16:54:35
USBカメラからキャプチャするプログラムを試してます。
http://opencv.jp/sample/video_io.html このサンプルプログラムをそのまま使っています。
ビルドもエラー無くでき、カメラは認識するんですが映像が映りません。
環境はVisial C++ 2008 OpneCV1.0 カメラはMicrosoft Life Cam VX-7000です。
設定などは全部できました。
素直に2.0以降を使いましょう。
1.0だとDirectShow経由で画像取得してる例がいくつかあるね。
cvFindContours で線形上のエッジを検出した後、そのエッジの始点〜終端までの
距離(ピクセル数ではない)を求めたいのですが、どのような方法が一般的でしょうか?
例えば斜めの線だと、2点間の距離はピクセル数ではない為、
線を書いてピクセル数を数える方法では対応できませんでした。
ピクセル数じゃない距離って何?
>>978 勉強不足ですみません。例えば X1=1 Y1=1 ピクセルを P1、X2=5 Y2=6 ピクセルを P2 とすると
2つの座標間を線を書くなどして現すと■のような軌跡で6ピクセルとなりますが、
これは X2-X1 か Y2-Y1 のどちらか大きい方の移動量を現すだけで、点間の距離ではありません。
P1とP2の距離を座標で計算すると SQRT((5-1)^2+(6-1)^2) で、距離は 6.403 になると思います。
■(←P1:1,1)
□■
□□■
□□□■
□□□■
□□□□■(←P2:5,6)
>>980 直線しか検出しないの?
2値化されているなら、
while(1){
■(X,Y)の場所から上下左右の9ピクセルの中から
上の座標以外で■のある場所を探して、その座標をX,Yに
■が無かったらbreak;
}
>>980 ではどちらか大きい方を選べばいいんじゃ?
len = max ( abs(X2-X1), abs(Y2-Y1) ) + 1;
上下左右への移動は1
斜め移動は√2で計算すればいいんじゃないの?
>>980 その距離が欲しいなら、その距離を計算すればいいんじゃないの?
等高線の長さが欲しいなら、擬似的には>983でいいし。
>983で>980の状況なら、等高線の長さは4√2+1で約6.66になるね。
985 :
980:2010/04/19(月) 21:10:34
皆さん
アドバイスありがとうございます。
983さんの方法が近似的に計算できそうなので、この方法で考えてみます。