【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/ なんか文末の文字変えてるみたいだけど、これで回避できんのかな。 糞鯖に変更されたタイミングで規制まで甘くなった感じがする Qtを組み込んだ時にnamedWindowするとデフォルトで出るコントロールパネルだけど、最前面に持ってくる方法はないのですか?
気を抜くとすぐ背面に隠れて、ウインドウ扱いされてないからタスクバーから復活できないし困ってます OpenCVとはちょっと違うというかOpenCVのテンプレートマッチングの原理の質問になってしまうのですが、
たとえば、DFTの変換結果をそのまま逆変換してもそのままでは元の画像にならず、
各ドットの値を面積で割らないと元の値にはなりません。
では、検索対象画像Sとテンプレート画像TのDFTの変換結果から、
R[y][x].実数 = S[y][x].実数 * T[y][x].実数 + S[y][x].虚数 * T[y][x].虚数
R[y][x].虚数 = -S[y][x]実数 * T[y][x].虚数 + S[y][x].虚数 * T[y][x].実数
の様な計算でRに畳み込み、Rを逆変換して出てきた値を
1.0(完全一致)〜0.0(完全不一致)や-1.0(完全逆位相)の値に正確に合わせるには
どの様な計算を行えば良いのでしょうか?
ttp://iphone.moo.jp/app/?p=630
(OpenCV3.1ではtemplatematch.cppの635行目、crossCorr関数となってもっと大きくなっていますが)
を言葉通りに受け取って相関係数を求めてみても1.0〜0.0の様な値にならず、
OpenCVのソースの理解を試みたものの、規模が大き過ぎて断念しました。
スーパーハカーな皆様、出てきた値の扱い方のご教授をお願いします。 突然ですが
画像処理の雑音の例でよく、インパルス雑音が挙げられていますが、現在で実際にインパルス雑音の除去が必要な場面はどういう画像でしょうか?
特に高発生確率のインパルス雑音がのる場合はどんなときでしょうか? ザクのメインカメラを想像しろ。宇宙空間はインパルス雑音ばかりだろ OpenCVとGPUImageって、どっちを使うか何を基準に決めたらいいんでしょうか?
iOS/Android環境で動作するアプリです。 何を基準にするかは君が何をしたいかで基準そのものが変わるんじゃね 自己解決しました
積和の場合、周波数空間で検索対象とテンプレートの位相と振幅を乗算して
元の空間でのドット毎の数値を極端に大きくする事によって、
明度に関係なく類似の度合いを検出しやすくしていると理解しました
しかし、書き込みには無かった本来の目的とは違っていたので、再度質問させて頂きます
ttp://opencv.jp/opencv-2svn/cpp/object_detection.html
CV_TM_SQDIFFの場合、検索対象画像Sとテンプレート画像TをそれぞれDFTで変換した後、
その変換結果である周波数空間にてどの様な演算を行っているのでしょうか?
>>514のCV_TM_CCORR又はCV_TM_CCOEFFの場合、
ttps://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
の離散フーリエ変換表の「時間軸畳み込み、周波数軸積」を複素共役によって反転した式だった為、
簡単に理解できたのですが、元の空間での”検索対象とテンプレートの位相と振幅の差の2乗”の総和を
周波数空間(フーリエ変換後の2次元配列)にて求める場合、どの様な式になるかまでは理解できていません
プログラムのコードの提示、数学での式、どちらでも構いません、よろしくお願いします opencv3.1でcvCreateKDTreeをつかうにはどうすればよいのでしょうか。また、代替品などは存在しますか? 質問させてください。
OpenCVSharpで画像表示させるとき
Cv.NamedWindow("window");
をいれても入れなくても
Cv.ShowImage("window",img);
で画像が表示できますが、あったほうがいいのでしょうか。
調べてみてもnamedwindowの必要性がわかりません。 >>521
namedwindow してなければ処理に応じて画像を書き換えるとかできないよね。
OpenCVでインタラクティブなプログラムを書くときには namedwindow しておいたほうが吉 >>522
書き換えの際に表示内容だけかえるときということでしたか!
ありがとうございました。 VS2010で2.4を使ってたのをVS2015と3.1に上げてみたが
未だにc4819の警告はでるんだな カメラで撮影した顔写真と予め撮っておいた顔写真を照合して
個人認証をするプログラムをつくっているのですが行き詰ってます
顔の特徴量を抽出する方法で作っていたのですが精度が悪い状態です
何か他によい方法はないでしょうか
撮影は常に顔の正面から行うつもりです >>527
解像度は640x480で距離は2〜3mを想定してます opencvで顔認証したいのですがopencv3.1では口や鼻のxmlファイルがありません
素人なのですがどうすれば良いのでしょうか? 自前で画像処理を行う関数を作った場合、
元の画像を受け取る引数はconst参照にするのと浅いコピーで受け取るのどちらが良いんだろうか?
最適化されるだろうからどちらも同じ? CVに関係あるインスタンスなのか、全く関係のないビットマップハンドルやラスタイメージなのかで
浅いコピーの量の事情は大分変わってくる 肝心のこと書くの忘れてたcv::Matの話です。8UC3か8UC1で。
基本はopencvで処理するけどopencvにない処理なんかを実装した場合にconst参照にするかどうかで悩んでる。 リファレンスのカウントとかしてっからその関数だけで全ての処理が完結するならconst参照でもええんでないかい?
不特定多数からアクセスされるリファレンスカウンタとか関わってるから最適化掛からないとおも
速度、大きさ、合理性だけで言えばconst参照が速くて小さくなって合理的
微々たるものだろうから呼び出し回数が大した事なくて、将来の仕様変更の対策とかIF揃えたいとかに拘るなら
まんまMat受け取って当面は暗黙のシャローコピーでも何でもお好きな感じでとしか >>531
引数画像を変更するつもりがないなら const 参照でいいはず。
画像の shallow copy は、仕様通りならば実質的に const 参照と
同じことになるはずだが、WGの実装力を信頼してはいけない。 opencv3.10では2.4シリーズのhaarcascade_mcs_mouth.xmlを使って口を検知することが出来ません
どのようにすれば良いのですか? OpenCVSharpで、getRotationMatrix2Dで取得したMat型の行列にアクセス(書き換え)をしたいのですが、
やり方が全くわかりません。
ある場所(例えば[1,2]の場所の値を書き換えたいときはどのように書けばよいのでしょうか。 mat.At<double>(1,2)か、mat.At<float>(1,2)か、その辺だと思う
参考:https://gist.github.com/ochilab/d720c9d961ed04b8c707 >>538
ありがとうございます。助かりました。
mat.At<double>で変数に値を取得して、
それを書き換えた上でmat.Set<double>でセットするのですね。 javaでHoughLinesPで直線検出しようとしていますが、
候補が複数あるはずなのですが、一本しか検出できません。
何か心当たりがあればご教授ください。
↓こんな感じで引数を渡しています。
Imgproc.HoughLinesP(CannyImage, Lines, 1, Math.PI/180, 50, 100, 50); 画像も貼らずに検出できませんとか言われてもな
thresholdかminLineLengthでも下げてみれば >>542
http://imgur.com/gD7exqZ.png
↑がcanny画像で、これにhoughかけても一本しか検出されなくて困っています。ご指摘いただいたパラメータも変更してもだめでした。
ちなみに一本というのはLines.cols.()が1を返してます。 OpenCVSharp使っているんですが
ゆらゆら揺れる水面で、突然激しく揺れる部分が時々現れるという動画があるんですが。
その激しいタイミングと位置を探したいんですが、まったく画像処理の知識がなくて
できません。
どなたかわかる方いませんか? RGBやHSB色で移動量見るとか、特徴点出して見るとか、ヒストグラムで調べるとか、
やり方は写ってるのに合わせて色々あるだろうけど、質問の仕方から察して作るの無理だと思うよ >>546
日本語むちゃくちゃですね
すみません
今のところグレースケール→2値化して
白いピクセル数の変化を見たりしてます。
本とかサイトでもなんでも教えていただけないでしょうか 最近のビデオカードはハードウェアで超解像できるそうだけど自分のmpegファイルをアップコンバートすることは出来ないのでしょうか deblurringしたいんだけどうまくいかない
IBPとウィーナーフィルターでやってるんだけど Halideが画像処理だけじゃなくて線形代数計算全体も高速化してくれないものか オプティカルフローで画像をつくると1分以上かかるのですが、高速化できますでしょうか。
1280x960の画像2枚を、sperres::createOptFlow_DualTV1()で、calcしています。 昨日ググったら、自分でコンパイルするみたいです。
コンパイルしようとしたら、ターゲットの装置にGPUが無かた。。。
後、オプティカルフローに速いもの遅いものがあるみたいで、
奇麗なのは遅いもの。。。 ソース画像の中から特定の画像を検出する方法としてMatchTemplate(テンプレートマッチング)と言う物がありますが、他に高速な方法はないでしょうか?
ゲームの自動操作が目的のため、検出したい画像は固定(サイズ傾き明るさは変わらない)と言う条件です。 テンプレートマッチング以外の画像検出にはどの関数を使用すればいいのでしょうか? >>559
テンプレートマッチングだとダメなの?どのくらいの性能が必要? USBカメラのfpsが安定しません
30fpsの物を使っていて、9割は33msで処理をしてくれますが残りは100msを超えたりします
安定させる方法を探しています カメラの機種もどういう処理してんのかも分かんないからエスパーしかできんが
暗いときとかにカメラがフレームレートを変えて露光時間を調整してるってことがよくあるかなあ
この場合カメラの設定で露出とかホワイトバランスのオート設定をオフにすると解消される openCV を build するのに cl.exe ではなく ICL.exe を使う事は可能でしょうか? waitkeyってどんな役割ですか?
フレームレート30なら33msにしろって書いてあったんだけど、例えば画像処理するとして、1ループ全体で33msなのか、1ループを処理時間+wait33msなのかどっちなんだ、もっと違う考え方? >>570
2010の参考書に書いてあった
とりあえず33msでいいでしょうみたいな
普通ならそれでいいんだろうけど、都合上ループの処理速度だけはシビアにしたい webカメラの話で良いのかな?
FPSの設定は VideoCapture::setかなんかでやるはずなのでwaitkey関係ない
waitkeyはキー入力の為の待機なのでキー入力しないならそもそも不要
そこで33msも待機させたら同じループ内の他の処理で1msとか時間かかった時フレームレート落ちる予感 それFPSの設定知らずに最速再生の状態で各フレームのウェイトを33.333...msにして
30FPSの速度にしてる、とかじゃね?(1000ms/30FPS) >>572
やっぱりset使うんだよね
自分も落ちそうだと思ってる
使ってた本にはwaitkeyないと動きませんって書いてあって、なくしたら動かなかった気もする
>>573
たぶん本はそんな感覚だと思う
自分はいらないと思ったからWait1msでやってたんだけど、フレームレート変えれるwebカメラ買ってもらって、いろいろ考えてたらwaitkeyってなんだ?ってなった 確かにhighguiを使ってる場合waitkeyがないと表示されないとかあったかも。うろ覚えなので仕様見てくれ。
あと>>とかで新フレーム取得まで待機してる間はキー入力を受け付けないだろうから
キー入力が必要な場合そこで待機させるよりwaitkeyを多めに設定する方が良いかな
まあ本気で何か作るならこの辺の機能は使わないだろうけど >>576
確かにhighgui使ってます
使わないで出来るのね…
使ってないサンプルプログラム探してみる
ある程度計測したら終了させる予定だから入らないかなぁ
waitkey不確定要素が多い気がしてならない >>577
言葉が足りなかったわopencv単独で表示するには他に方法はないと思う
opencvはあくまで画像処理とかのライブラリでGUIはちょっとした確認や処理のためのおまけみたいなもん
本気で動画やカメラを使うアプリケーションを作るならGUIは別のフレームワーク使うだろうということ >>578
つまりopencvはwebカメラの画像取得および出力に関してはあんまり機能がなくて、取得された画像を処理することに長けていると言うこと?
初心者過ぎてすまん
画像処理としては二値化で物体検出、重心を求めるぐらいしかさせてない… そもそもOpenCVに直接カメラのハードウェア設定をいじらせようってのが無理な話なのでは?
あくまで画像処理ライブラリだし。
FPSを変更出来るカメラなら、仕様書なり取説なりあるかと。
シビアに計算したいのならFPSだけじゃなく、露光時間や転送時間も計算しないとダメだし。
いくら30fpsに設定しても、他の時間で100msかかってたら無意味。 >>579
そういうこと
色々言ったけど勉強したりちょっとしたことやるには十分だしwaitkey(1)で良いと思う set用いてfps60に設定したのに全く変化なし…
じゃあ解像度変えてfpsあげようと思ったけど変える方法がなさそう
使ってるカメラの仕様には解像度1080pで30,720pで60と書いてあるのに… ロジクールのやつで試した時は解像度640x480で60fpsいけたな
ドライバ側の設定でオート機能オフにして露出下げたらあるいは って見落としてたけど解像度を変える方法がなさそう?
setでできるでしょ setは動画ファイル読み込み限定でカメラ設定はいじれないっていう情報が調べたら出てきた
どこまで信憑性あるかわからんけど
とりあえず解像度いじったけど逆に重くなった… opencvの取り込み処理とかウインドウ表示とかはちょこっとopencv使いたいとき向けのでしょ
きちんと使いたいときは取り込み処理を別に用意したほうが・・・ >>587
そっちの方面も視野にいれてます
初心者過ぎるので、簡単なやつ希望です… だーかーらー、カメラ標準ソフトを使うとか、
せめて取説や仕様書を読めと
作る側は「簡単な物」ほど作るのは難しいってことを理解しとけ あと、ハードウェアに出来ないことはソフトウェアには出来んからな
解像度やFPSの仕様以上のことをやらせようとしたら、
超解像とかハードルが一気に高くなる上に、あくまで「作られた画像で補完」になる >ハードウェアに出来ないことはソフトウェアには出来ん
日本語の使い方が正しくない >>589
カメラ標準ソフトか…
ロジクール製品なんだけど、取説とか仕様書はないに等しかった
>>590
スペック通りに動かしたいだけなんだ
とくに解像度はどうでもいい >>591
理解が正しくないよ
>>590が言ってるのは30fpsまでしか対応してないカメラで100fpsの映像を造りだすみたいな話
>>592
webカメラの製品独自の仕様はそれであるけど、探すだけ無駄。ほとんど非公開だろ
汎用的にwebカメラを制御する仕様はほぼ統一されてるしぐぐりゃ星の数ほど出るからそれ見ろ。それすら探せないってなら諦めろ >理解が正しくないよ
> >>590が言ってるのは30fpsまでしか対応してないカメラで100fpsの映像を造りだすみたいな話
この意味なら漏れの理解したまんまだな 今してるのはハードウェアでもOpenCVでもできることの話だろ
なぜまずOpenCVのマニュアルを確認しないのかは知らないが オートフォーカスとか露光の自動調整は本格的な画像処理するときにまずつまずく部分 <オートフォーカスや露光調整くらいは画像処理でやって
<リアルタイム60fpsで、画面解像度はFUHDで、分解能も8bitじゃなく16bitでやってね
<民生品でやってるから、そのくらい簡単に出来るでしょ? Qtバックエンドのウィンドウでマウスコールバック取るにはどうすればいいんだ? Qt組み込んだだけで本体はhighguiのウィンドウじゃないの??よく分からないけど よく分からないのでそこをなんとかお願いします。
マウス座標が取得できなくて大変困っております。 何故最初は小さいプログラムから作らないのか
qtとOpenCVでマウス座標取ってこい opencv3.1で
connectedComponentsWithStats使ってラベリングしたんだが
指定した面積以下はラベリング除外ってできる? >>606
言語はC++でVisualStudio2015 それぐらいの処理ならソースコード読んで自分で組み込んだらいいんじゃね >>606
そのまんま、ラベリング結果を操作するだけでいいと思うけど。どんな動作を想定しているの? >>609
指定面積以下にはラベル付けをしない
今は無理やりラベリングした結果の面積をif文で無理やり指定面積以下のラベルを表示しないようにしてる
だからラベル番号表示すると飛び飛びなんだよね
最終的にはラベル番号がちゃんと連番かつ面積以下を除去できるようにしたいわ あとラベリングした輪郭が途切れたりしてるからラベリング統合みたいなのできたらいいなって今考えてる ■ このスレッドは過去ログ倉庫に格納されています