【Intel】OpenCV総合スレ 5画素目【画像処理】
■ このスレッドは過去ログ倉庫に格納されています
OpenCVはインテルが公開したオープンソースのコンピュータービジョンライブラリ。
現在はWillowGateが開発している。
本家
http://opencv.willowgarage.com/wiki/
日本語資料など
http://opencv.jp/
前
【Intel】OpenCV総合スレ 4画素目【画像処理】
http://toro.2ch.net/test/read.cgi/tech/1329040627/ Webカメラをcv::VideoCaptureで制御するとき、
grabや>>でフレームを取得すると新しいフレームが撮影されるまで待機するみたいだけど、
これってフレームが更新されていない場合は待機せずスキップするみたいなことはできないんだろうか?
カメラごとにスレッドを立ててそこで動かせば良いんだろうけど、
複数台のカメラを制御する場合とかちょっと不安だ 角度の変化にも対応した顔検出器作ろうとちまちま3つほどやってみたけど全部ゴミでした
俺の4ヶ月分の暇な時間返してマジで >>411
フレームをスキップする時、スキップしたフレームの画像はどうするの?
多分コマ落ちをわかりやすくしたいんだろうけども、
やるとしたらタイマー設定して、フレームが取得されなかったら真っ黒の画像を挿入するとかでどう?
やったこと無いけどもw >>414
いやそうじゃなくて、新しいフレームを取得する間、30fpsのカメラなら最大1/30秒近くそのスレッドが止まるわけじゃん
例えばOpenGLを使っていてペイントの関数内でカメラからフレームを取得すれば画面がその間固まってしまう
こういう時新しいフレームがまだ撮影されてなければスキップできると便利だなと >>415
callback準備したasyncgraberなければ作れば良いのに
opencvはそんなのもなかった?
cでは自分でasyncつくってたからよくわからん Windowsでプレイする麻雀ゲームがあるのですが、
それを自動でプレイする麻雀AIを作りたいと思っています。
麻雀ゲームを操作する部分で画像認識とマウス操作を使いたいのですが、
その画像認識でOpenCVを使えないかと考えています。
OpenCVは全然知らないのですが、何か画像認識で参考になる書籍やWebサイトなどおすすめを教えてもらえないでしょうか? というか雀牌なんて表示位置決まってるんだから
OpenCVのパターンマッチャー使うよりより↓と同じ方法を使った方が楽
http://qiita.com/YSRKEN/items/819dd3acf750ff5c0e7f >>420
参考になるURLありがとうございます。
同じ方法というのはJAVAを使うということでしょうか?
艦名の認識で書かれているように簡略化するということでしょうか?
これまでWin32APIでアプリを作っていたもので、可能ならC言語でやりたいのですが、
同じようなことは簡単にできるのでしょうか?
あと麻雀牌に利用することはできても点数状況の認識などは結局OpenCVを使った方がいいのでしょうか?
たくさん質問してしまってすみません。 ごめん
やっぱ100年早いって意見の方が正しかったわ
一昨日きやがれ >>421
定型的な画像しか入力されないんだから画像認識なんて必要ない。
スクリーンショット撮って特定の部分を調べるだけ。
どこに表示されるか決まってるんだから画像をバイナリ比較したらいい。
n 文字目から strcmp するのと大差ない。
次からは初心者質問スレか知恵袋でやれ。 >点数状況の認識などは結局OpenCVを使った方がいい
画面に点数表示されてるなら
そのまま読み取った方が楽じゃね 知識不足で色々すみません。
>>423
OpenCVなしでできそうですね。
ありがとうございます。
>>427
そのままって言うのはどういうことでしょうか?
OpenCVを使わずに423さんがおっしゃるやり方を点数にも適用する感じでしょうか? ×知識不足
○身の程知らず
ぶっちゃけ何でム板にいるの?ってレベル エッジ抽出した後に抽出したエッジを一定の大きさに分割する方法はありますか? あーはいはい、抽出した輪郭から隣接領域を再抽出したいって話ね
方法はあるけどここに書くにはフォーム欄が小さすぎて無理だな http://codepad.org/eoG65A9x
以下のプログラムのように(実際はエラーで動作しませんが)特定のアプリケーションのプロセスメモリを読み取ってそれを適時画像に文字として表示するプログラムを作りたいです。
どのようにすれば可能ですか? Sleep(1000)の代わりにwaitKey(10)などにしたところ無事いけました。
とあるゲームで敵のHPを画面表示するツールを作りたかったのですがいけそうですw opencv1.0に関しての質問です。
cvMatchTemplateでの結果を入れたIplImage構造体があって、cvMinMaxLocを使えばもっとも一致した点が求められるのは分かったのですが、
一定値以上の複数点を求めるにはどうすればよいでしょうか?
IplImage構造体の中にchar *imageDataというのがありますが、これをどうにかして調べるんでしょうか? >>436
- C言語の配列・ポインタがわかるか
- なぜ2.4や3.0ではなくopencv1.0なのか >>437
配列ポインタは一応分かります
opencv1.0なのはbcc developerで開発してるのですが、ネットで1.0の組み込み方法だけ分かったからです >>436
http://opencv.jp/opencv-1.0.0/document/opencvref_cv_matching.html
ここ読んでる?
result
比較結果のマップ.シングルチャンネルの32ビット浮動小数点型データ.image が W×H で templ が w×h ならば, result は W-w+1×H-h+1のサイズが必要.
って書いてあるから、
flota *result = (double *)imageData;とすれば普通に読めるんじゃない? >>440
レスありがとうございます。
知識不足で申し訳ありませんが、確認させてください。
IplImage result;
float result2;
cvMatchTemplate(image,templ,result,method);
result2 = (double *)result;
としておいてresult2のアドレスが指す値を見るということで合っていますか? あ、ごめんなさい。以下でしょうか。
IplImage result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (double *)result; >>441-442
すまん、まちがえた。
float *result2 = (float *)result.imageData;
かな。これでresult2[0]〜result2[W-w+1×H-h+1]が結果のデータになってると思うけど。
試してないから間違ってるかも おせっかいだけど、どうも、見てる限りOpenCVでのIplImageの取り扱いに慣れてなさそうだから、まずはもっと簡単なところから始めてみたほうがいいかも。
例えば、256x256のIplImageを作って、左上が黒、右上が赤、左下が青、右下が紫になるようなグラデーション画像を作ってみるとか。
色違うけど、
http://www2.rgu.ac.uk/subj/ats/teachingweb/teaching/t16/Wk4-Colour/PhotoshopColourPicker.jpg
こんなやつね >>443
IplImage result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (float *)result.imageData;
なぜか上記のようにすると
. または .* の左側に構造体が必要
というエラーが出てしまいます。
せっかく教えていただいたのに、うまくできずにすみません… cvMatchTemplaeの3番目の引数ってポインタじゃないの >>447
IplImage *result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (float *)result.imageData;
ごめんなさい。こうですね。
書き込みにする時に変数名を変えたので間違えていました。
結果は変わりません。 >>448
アロケートもしてんの?
ttp://opencv.jp/sample/matching.html
dst_img = cvCreateImage ( .... ruby-opencvなんですが必要な色の領域だけ抽出した二値画像の重心はどのように計算すればいいのでしょうか
リファレンスガイドを読んでもよく分からなかったです >>449
やってます!それがいけないんですかね? >>451
そうですか!コードやエラーくらいそのままコピペできないんですかね? >>451
・あなたは言葉で状況を説明しているが「言葉による状況描写」そのものが
誤った認識に基づいているならば情報量ゼロ
・あなたは周辺コードやエラーを「ノイズ」だと思って書かなかったのだろうが、
ここで助言をできる人たちにとってそれこそが情報 >>450
重心とかあまりわからんけど座標の平均値を取ればいいだけじゃね? Aの上半分をBにコピー
Bの上半分をCにコピー
これだけでエラー出てくるけど何なのこれ エスパーするとファイルがロックされているか、
範囲がズレてるんじゃね 知らんけど「OpenCV 浅いコピー」でググってみると幸せになれるかも それはわかっているから、
書き込むならせめて何を勘違いしたかくらい書け 頭が悪かったから、ではなく
なにをどうしたらどうなるとおもっており、
それはそもそも単純にAしたらBになるという誤解の反映であり
そのような誤解を持った理由はOpenCVにおける設計が若干クソ
なのはさておき、二種類のコピーがある事、更には二種類のコピーが
用意されてる理由などを把握していなかったからでした。
これらのコピーはそれぞれ浅いコピー、深いコピーなどと呼ばれておりうんたらかんたら。
使いドコロとしては浅いコピーは(ここになんか書く)
一方深いコピーは(なんか書く)
注意しなければならないこととして Mat を operator= でアレしたときには(うんたらかんたら)
(ごにょごにょ)というわけで、何をほげしたい場合には浅いコピーで十分で具体的には
ほげほげで十分ですが今の場合にはほげげをすることが必要だったので
深いコピーが必要であり、そのためなんとかという構文で明示的にクローンする
必要がありました。
みたいに書く。そうやって書いておくとここ読んでる人にも有益で、おまえが
他人に教えるときにもテンプレにできるのでWin-Winだな。 みんなでごにょごにょ部分を穴埋めして文章完成させるスレってのがあったな Cudaで高速計算したかったらopencv3使うしかないのかな
まだ2のままでいたいのだけぢ Cudaで超解像画像やるとか凝ったことはopencv3でしか出来ない? OpenCV触り始めたんですけど、サンプル見てとりあえず、
IplImage *src_img = NULL ;
char imgfile[] = あれ、すいません。
コピペで貼ったんですが切れてしまいました。
IplImageをcvCreateImageしてcvReleaseImageしただけでメモリリークしているようなのですが、
他に何か終了命令などはあるのでしょうか? >>322-323と、その後参照
今はcv:Matだから古いサンプルを見るのを止めるのが一番かもしれんがw OpenCVはただのゴミだからインストールしないのが吉。
パソコンプログラミングの超神クラスの俺でも100時間かかって動かせなかった。
はっきり言って時間の無駄。
すでに何百時間も費やして動かせるようになってる人にはとやかく言わないが、
導入を検討してる人はとにかくやめておけ。 >>478
パソコンってことはWindowsかMacだろうけど、どっちも標準の
開発環境でやってればそんなに迷うようなことないんじゃない?
まあでもそうでもないか。Windows+VSでやってたとき、わりと
DLL関係のプロジェクト設定で躓いて先生に助けてもらったわ。
ああいう設定って一度知ってる人に聞かないとだめだね。 >>478
どうしてゴミだと思ったの?
どの辺が理解出来なかったか他人にうまく説明出来る?
本気でやる気があったらここで聞いてくれてもいいんだよ? パソコンプログラミングの超神クラスの俺さんなんてスルーしとけ IplImageってどこで使われてるの?
組み込みは分かるけど >>479
環境書いていませんでしたがWindowsです。
今はMatなんですね。気がつきませんでした。
あとcvMatでも_CrtSetDbgFlagでフラグ立てておくと
メモリリーク出ますね〜。心臓に悪い。 Opencv2とopencv3の両方で動くようにするにはcvmat使えばいいの? Pythonはやばいな
6行くらいでCVスクリプト動くからな VS2015 Win32コンソール
int main(){
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//_CrtSetBreakAlloc( 335 ); // リークの出力の{}内の数字に適宜変更して有効にすればブレーク
cv::Mat search_img = cv::imread( "zbase.png", 1 );
}
new してる箇所
〜\opencv\sources\modules\core\src\matrix.cpp(241)
CV_SINGLETON_LAZY_INIT(MatAllocator, new StdMatAllocator())
それを記憶する箇所
〜\opencv\sources\modules\core\src\matrix.cpp(231)
g_matAllocator = getStdAllocator();
たったこれだけでリークしちまうのか
後始末してくれるメソッドの類はないっぽいし、
外側から無理矢理クリアするにも適切な方法がわからんし、どうしたもんかなぁコレ
C#やPhythonで使うにしてもアンマネージドな部分のリークに不安が残る
それとも識者は後始末かリークさせないようにアロケータ自前で設定してたりするのん?
おせーてエロい人 追伸
目的はテンプレートマッチングなんだけど、
メモリリーク箇所全部追跡しようとしたら1回検索するコード実行しただけですんげぇログ吐き出してくれて
思わずハードディスク毎窓の外にブン投げてソースコード破棄したくなった 何か気持ち悪い文体だけど自分面白いと思ってそう
質問するならそれなりの態度でお願いするべきだと思いますよ 質問があります。
cv::Mat depthMat;
depthMat=cv::Mat(depth->height,depth->width,CV_32FC1,depth->data)/4500.0f;
とあり、最後にcv::imshow("depth",depthMat);
で表示されているんですが、いままでCV_8UC1やC3,C4だったのでどうして表示できてるか
分かりません。
中身にどんな値が入っているかもわかりません。
8bitなら0~255で理解できたのですが、32bitだとデータに.atや.dataでアクセスしても変な数字しか出ません。
それに.atと.dataで値が違うのも気になります。
どなたか教えてください。 depthMat.at<float>(x,y)とかで正しい値とれない?
dataの方は、((float *)depthMat.data)[i]とかしないと正しい値取れないと思うよ。
結局はバイナリデータのアクセスだから、キャストちゃんとしないとまともな数字が取れないと思う 494です。>>495さんの言う通りでした。ありがとうございます。
後、質問なんですがjetson tk1とかに関する質問ってどこの板が適切ですか?
ご存知の方がいらっしゃいましたら教えてください。 どっかのへっぽこ大学じゃなくてMITがドヤ顔で作ったライブラリなんですが
宣伝乙脳になるとこういう反応になるのか 有名大学だからって有難がる権威主義でも無いし
良い物ならみんな使ってる >>500
君が >498 でないなら釈明する必要はないし、>500 の言い分はごもっともだがその理屈から >498 が出てきたら失笑なことは変わらない。 二重指数積分公式は最高性能の数値積分法であるにもかかわらず
「白人が作ったものではないから」という人種差別的な偏見によって二十年間世界から無視されていた。 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
b >>508
あちこちコピペしてるだけだから反応すんな 2ちゃんってスパム灰汁禁にする機能あったはずなんだが ■ このスレッドは過去ログ倉庫に格納されています