【Intel】OpenCV総合スレ 3画素目【画像処理】
OpenCVとはインテルが開発・公開しているオープンソースのコンピュータビジョン向けのLinux/Windows向けC/C++ライブラリです。
実装分野は
・ユーザーインターフェイス
・物体分離
・セグメンテーションと認識
・顔認識システム
・ジェスチャー認識
・モーショントラッキング
・感情モーション
・モーション理解
・モーションからの構築(SFM)
・モバイルロボティクス
前スレ
【Intel】OpenCV総合スレ【画像処理】2
http://pc12.2ch.net/test/read.cgi/tech/1230511656/l50 関連リンクなどは
>2-10くらい
やっと3ピクセル目かよw
OpenCVって今もIntelが開発しているの??
8 :
デフォルトの名無しさん:2010/04/21(水) 07:27:38
オープンソースで、メインの開発者たちの所属はいろいろ
(IntelとWillow Garageが多いみたいだけど)だから、
○○の会社が開発している!ってこたーないんじゃね?
9 :
デフォルトの名無しさん:2010/04/21(水) 13:20:05
macのOpenCV2.1でバグありますか?
白黒のpngファイルを読み込んで、全部のピクセルを調べて、もし色が白だったら、その座標を保存する、ってことがしたいんです。
Mat img = imread(filename, 0);
for(int i = 0; i < img.rows; i++){
for(int j = 0; j < img.cols; j++){
ここをどうやってかけばいいのでしょうか?
}
}
ちなみに画像はこれです
http://imagepot.net/view/127206379328.png
反転してマスクにするのはダメなの?
出来ました。
cvGet2Dでいけました
新たな問題が…
ax + by + cz + d = u
ex + fy + gz + h = v
ix + jy + kz + l = 1
x, y, z以外は値が分かっていて、x, y, zを求めたいんですけど、cv::Matをつかって求められますか?
どうやってもとめればいいんでしょうか?
| a b c d |
| e f g h |
| i j k l |
と( x y z 1 )の転置の行列積が(u, v, 1)の転置になると考えて、式変形すると解けるよ
>>15 そうやって、変形してからどうやって解けばいいんでしょうか?
cv::Mat inv はつかえないですよね?
>>17 あっ ほんとだ! 解けました
また話は変わるんですけど、今、複数のカメラの画像からの3D座標の再構築をやっているのですが、
手元に、それぞれのカメラの3×4のプロジェクションマトリックスはあるので、
あとは、画像のxy座標を上の式に入れて解いてやればワールド座標が求められるんですよね?
この考え方あってるんでしょうか?
>>13 参考までにお聞かせください。
マスクにすると?ピクセルの座標が簡単に取得できるんですか?
できるとすると、どのような方法でしょうか?
今まで for文で回して 取得していたもので・・・。
あと、OpenCVって、IPPと違って 1bit カラーで画像を扱えませんよね。
メモリを多く使いますが、8bitグレースケールをマスクとして使うしかないですよね。
20 :
デフォルトの名無しさん:2010/04/27(火) 18:47:23
haartraining.exe実行中に
Corrupt JPEG data:premature end of data segment
と表示されて止まってしまうのですが、
どなたか原因と対策分かる人いますか?
[原因] データが壊れている
[対策] 正常なデータを使用する
22 :
20:2010/04/27(火) 22:55:28
>>21 ありがとう。どのファイルが壊れてるか確認する方法はありますか?
画像ファイルが一万個ほどあります。エクスプローラでさっと見る限りは異常はなさげですが。
23 :
20:2010/04/27(火) 23:10:21
Jpegアナライザーというソフトを見つけました。
フォルダ内のファイルを一気に解析可能です。
24 :
20:2010/04/28(水) 00:00:56
解析しましたがエラーは一つも検出されずでした。
まいったな。
>>22 手動2分木探査をする。
1) ファイルの半分を別のフォルダに移動。
2) haartraining.exeを走らせる
3) エラーがあったら1にもどる
4) エラーが無かったら別のフォルダに移動してから2にもどる。
これを最後の1ファイルになるまで繰り返す。
gslはいろんな言語にインターフェイスあるのに
OpenCVはpythonしかないな
>>20 画像はcvLoadImageで読んでいるから
全部の画像をcvLoadImageで読み込むプログラム作ったら分かるよ。
顔検出でいろんな画像で試してみたんだが
誤検出率があまりにもひどいな
びっくりしたわ
平坦な場所とかで検出してるし
せめて必ず正解を含んでるとかならまだしも
明らかな顔があっても拾わない事が多いな
設定が悪いんじゃねぇの
それでも酷いって言うならパターン自分で作るか
OpenCVに頼らず自分で実装すれば良い
取り合えずOpenCVに文句言うことでは無いと思う
おそらく自分の顔で試したんだろう
31 :
デフォルトの名無しさん:2010/05/02(日) 22:50:59
顔検出。
数値を示してないから良い、悪いは何とも言えないが、そう思うなら自分で学習させた方が良いかも。
デフぉの学習画像てどっかで見れるのかな?
OpenCVよりいい顔検出ライブラリを作れる人がそこら中にいたら
とっくに作られているだろうからそれを使えばいいよ。
質問があるんだが、忌憚無い回答をお願いしたい
個人的にOpenCVは、個人や大学の研究レベルで使う物で、
データや処理の精度なんかを特定(固定)させて、それで望む結果を得るような感じだと思っている
(汎用的で且つ高精度な処理は出来ない)
しかし何を思ったのか、うちの”会社”の上層部がOpenCVを使って売り物を作ろう的な事を言い出したんだ…
例えば、WEBカメラで撮ってる映像から、登録したユーザー個人を認識してピックアップさせたいとか(顔認識を使う)
でライセンスとか特許とか調べ出して本気で使う気なんだ…
でOpenCVは画像処理の敷居を下げる為のライブラリで
商売目的で使うには精度が出ないと実験結果を交えて説明してるんだが、上と担当が全然分かってくれないんだ
俺の実験はわざと失敗する様にしてると言い張り、自分に都合が良い条件で実験実装して出来てる売り物になるの一点張りなんだ
(常に対象が正面を向いてる鮮明な動画を使ってるw)
もう担当じゃないし突き放しても良いんだが、この御時世に同じ”会社”で
そんな事で金と時間と人を使って欲しく無いので止めたいんだが…
俺が製品に対する精度を高く考え過ぎなんだろうか?
どこが質問なのか分からない件
デフォルトのOpenCVに出来なくても、その上に自分で作ったアルゴリズムを載せていけば
満足するまでレベルを上げていけると思うけどね
>>34 要領を得ない内容で申し訳ない
つまり、OpenCVで本格的な商用アプリやサービスを作るのは向かないと思いませんか?
って事
一応大学の院で画像処理を学んだレベルなんだが、OpenCVの判別認識系の処理は精度が低いと思っている
そして、そのライブラリ処理を使って独自の処理を構築するくらいなら、全て自社で開発すればクオリティや作業時間が一番になる筈
(OpenCVの仕様やらインターフェイスに引っぱられるなら使わない方がいいって思ってる)
OpenCVには画像処理の基本をすっとばしてライブラリ使うってイメージしか無いので…
(だから画像処理の敷居を下げる物としては優秀だと思う)
因みにOpenCVを使う事で作成時間的なアドバンテージを得たいとかの主旨ではないです
openCVを使ったほうがクオリティやコストなど総合的に判断して合理的だと上層部は決断したんだろ
必ずしも間違っているとは言えないと思うが?
OpenCVで本格的な商用アプリやサービスを作るのは向かないと思いません。
>>34でも書いたけど、デフォルトのOpenCVでは商用アプリとして厳しいと思いますが
好きなだけOpenCVに上乗せしていけばいいと思います。
別の顔認識アルゴリズムを載せるのも良いでしょうし、笑顔検出だって欲しければ作ればいい。
OpenCVを使うことと、精度(検出率?)は関係無いと思いますよ。
> そのライブラリ処理を使って独自の処理を構築するくらいなら、全て自社で開発すればクオリティや作業時間が一番
顔認識を商品化するくらいなら、自社ライブラリがあるんじゃないのかな。
OpenCVから欲しいところを自社ライブラリに移植すれば解決だね(クオリティが上がるかは疑問ですが
# ライセンスの事は考えてないので、自分で調べて解決してください
よく解らんが、「OpenCVを使うことで失敗する」ではなく「OpenCVではない別の解決方法」を
上長に提言しないと採用されないのじゃないのかなー
上の人も言ってるけど、OpenCV自体は画像処理の土台を提供してくれるものだと思います。
OpenCVの関数は大半がごく基礎的なもので、その上で、キャッチーな機能も実装されてる、ってかんじじゃないかな?
行列演算もフィルタ処理も色空間変換も、SSE化や並列化も全部一からやりたい、って場合もあるかもしれないけど、
あるもの使うのが良い場合もあるんじゃない。
Googleだって、ストリートビューの処理とかでOpenCV使ってるらしいですし。
あ、でもお金あるんだったらHALCONとかの方が簡単な場面も多いと思います。とくにFA用途などでは。
あとOpenCVの認識系の処理の精度が低いって言っているのは、何と比べた結果なのかちょっと気になりますね。
OpenCVを画像処理ライブラリとして使うのはいいと思うけど
顔検出のアルゴリズムをそのままは弱いよな。
真正面しか検出できないし。
つか、アルゴリズムの問題じゃなくて、でふぉで入ってる学習データが研究レベルのモノだってことなんじゃないの。
一般的な商用の画像認識ライブラリの学習データに使ったデータからすると、規模も質も比べ物にならないだろ。
顔認識などか難しいのは、アルゴリズムの実装じゃなくて、データ収集と学習処理時間への投資がかなりの規模になるってことなんじゃないか。
商用の場合、規模と質を背景に、高いライセンス料を取るわけだ。
画像の質?ってのは良くわからんが、
画像の量は、単に増えても過学習を引き起こすか、ペナルティで意味がなくなるだけなんじゃ?
なんか顔検出に話が偏ってるけど、そもそも頭抜けた検出率の商用ライブラリとか存在するの?
みんないったい何のソフトの話をしているんだろう・・・
ちょっとだけ斜め方向の検出率が良くなりました、とかそんなイメージ。
商用のライブラリは小手先の小細工みたいなので性能を底上げしているから
研究用のシンプルな作りのライブラリとは天と地の差になるってことかしら。
でもそれだと研究じゃまともな性能評価は出来ないってことになるような気もしないでも無い
OpenCVをどのレベルまで使うかによるが
単に画像処理のサポートをするライブラリとしてみれば
精度もくそもない
>>46 すげ〜。 iPhotoもこれぐらい出来てほしいな。
凄いけど、最初に並んでる画像以外選択できないのは何でだろう?
それって、スターバックスとマクドナルドをコーヒーだけで比較するみたいなもんだよな。
開発したPCと別のPCで作成したアプリを実行する必要に迫られています。
実行環境にもopencvをインストールしなくてはならないのでしょうか?
現在、「error while loading shared libraries : libcv.so.1: cannot open shared object file : No such file or directory」
いうエラーで困っています。
実行するPCではadmin権限を持っていないので、opencvをインストールすることは難しいです。
開発環境がubuntu8.04、実行環境がcentOS5.2、コンパイラはg++を用いました。
よろしくお願いいたします。
lddしてnot foundになってる共有ライブラリをコピーしてくればいいんじゃねっすか
55 :
デフォルトの名無しさん:2010/05/07(金) 00:47:46
けど俺が最初に買った自作の本はハンダでGOってやつだったよ
56 :
55:2010/05/07(金) 00:48:28
誤爆
>>46 画像ファイルのURL指定して検出させてみたら
これもそんなにOpenCVと変わらない
>>57 素でhaarだけやったものと比較したらかなり違うだろ
たぶんいろいろな探索結果を掛けてさらに絞り込んでるんだろうけど
ところで分類器の作り方がよくわからない
WindowsでGUIで動くサンプルを集めるツールとかないの?
画像指定して目的の場所を選択していって
一括でサンプルを生成してくれるみたいな
そういうツールが欲しいなら作れば良いのではないか
63 :
デフォルトの名無しさん:2010/05/13(木) 18:37:07
現在、PCに1.1、2.0、2.1が入っており、全てのパスを通しているのですが、これって問題無いでしょうか?
また、使用しているOpenCVのバージョンを表示させたり確認する方法ってありますでしょうか?
>58
ツールがすでにあると思うが
createsamples.exe
haartraining.exe
顔検出といえば2.0から特徴量にLBPが追加されたが試した人いる?
freeBSD上でopencvを動かしています。
顔認識を行った後cvsaveimageを用いて画像をjpg形式で保存すると化けてしまいます。
壊れたCRTの画面のような画像になってしまいます。
bmp形式で出力したところ正常な画像でした。
ヘルプお願いいたします。
ヘルスなら
>>67 ImlImage *img = cvLoadImage("a.jpg", 1);
cvSaveImage("b.jpg", img);
のようなコードでも化けるのか確認した?
>>69 int
main (int argc, char **argv)
{
int i;
IplImage *src_img = 0, *src_gray = 0;
if (argc < 2 || (src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_COLOR)) == 0){
return -1;}
cvSaveImage(argv[2], src_img);
cvReleaseImage( &src_img );
return 0;}
としてやってみました。
化けてしまいました・・・。
>>70 libjpegかな
新しいの入れ直してみたらどうだろう
ビューワーがバグってるってことはないよね
70です。
opencvのインストールの際の./configureの吐く出力を見てみたところ
Image I/O ---------------------
Use libjpeg: no
となっていました。
/usr/local/libには
libjpeg.a
libjpeg.la
libjpeg.so
libjpeg.so.11
が存在します。どうすればUse libjpegをyesに出来るのでしょうか?
よろしくお願いいたします。
FreeBSD なら、Ports からインストールすればいいんじゃね?
どうしても自前でやりたいなら、configure にオプションか、cmake あたりじゃないかしら。
というかそれぐらい解決できないなら、おとなしくPorts使っとけ。
76 :
デフォルトの名無しさん:2010/05/18(火) 23:20:52
windowsでアプリ起動時に、ダイアログが開きリストボックスから
使用したいカメラを選択してから使用するソフトを作りたいのですが
OpenCVにusbカメラ名を取得する関数とかありますか?
cvCaptureFromCAMのindex番号とかから取得できる関数がないかなと
opencv.jpでhighguiの関数を見てみたんですがそれらしきものはありませんでした。
winのapiを使うとかしか方法はないのでしょうか?
よろしくお願いします。
>>76 videoInputってライブラリ使えばできる。opencvの機能ではないけど。
iplimageの取得まではvideoinputでそれ以降の処理はopencvでやればOK
79 :
76:2010/05/19(水) 22:02:36
>>78 ありがとうございます。
方法の糸口すら、見えてなかったので感謝です。
>>77 root無しでもPorts使えるよ。
/usr/ports/Mk/bsd.port.mk あたりに説明あるから、適当に環境変数変えてやってみるといいよ。
スレ違いスマソ
videoInputはOpenCVに統合された
wrapされた中身を見ることはできるの?
OpenCVの関数って
Cで素朴に書いたものよりはるかに高速なんだけど
なんであんな速いの?
マシン語でも混じってるの?
どの関数かわからんけど、お前の書き方がヘタなんじゃね?
SobelとかCannyとかです
最近のはSIMD使ってるしOpenMPかTBBで並列処理してる
ひょっとしてコンパイルオプションの問題なのかな
cmakeの設定でON/OFFがある
waveレット変換とかそういう話し?
いいえ
人が正面を向いて映っている画像があり、その画像が回転してしまっているとき(カメラを横に向けて撮影した場合など)
これを正立状態に直したいと考えています。(頭がちゃんと上を向く向きに直したい)
画像がどっちに回転してるか(頭が左を向いてるのか右を向いてるのか)を知る方法ってあるのでしょうか?
画像を回転させながら
まっすぐな顔しか検出できない顔検出(たとえばOpenCVの顔検出)で顔検出して
検出された顔が多い角度に投票するようにして最大値をとれば顔の角度が大体分かる。
93 :
デフォルトの名無しさん:2010/05/27(木) 18:16:51
なるほどやってみる。
うはwwwwっをkwwwwwwwwwwwww
すげぇがんばったのにorz
97 :
デフォルトの名無しさん:2010/05/31(月) 20:55:01
2.1を入れてフレームワークを作れなかったので、アンインストールしたいのですが、どうやればいいですか?
>>97 インストールしたフォルダにuninstall.exeがあったと思う
99 :
デフォルトの名無しさん:2010/06/01(火) 00:33:02
>>98 すみません。書き忘れたのですがMacです
100 :
デフォルトの名無しさん:2010/06/01(火) 01:41:48
MacでOpenCVの2.0を使っている方で、/usr/local/libに
libopencv_calib3d.2.1.1.dylib
などの2ファイル名に2.1.1が入ったものはありますか?これは2.1の残骸でしょうか?
101 :
デフォルトの名無しさん:2010/06/07(月) 20:02:40
初心者丸出しの質問で恐縮です。
OpenCVのサンプルのstereo_match.exeをcygwinで動かそうと
./stereo_match.exe left01 right01
と打ったら
OpenCV Error: Assertion failed (img.type() == CV_16SC1) in unknown function, file
..\..\..\..\ocv\opencv\src\cv\cvstereosgbm.cpp, line 824
と返されたのですが原因は何でしょうか?いろいろ調べたのですがわからずじまいです。
2枚の画像があったとき、それぞれのカメラ間の位置・姿勢(R, t)を求めたいのですが、どうすればいいでしょうか?
2枚の画像間のF行列はcvFindFundamentalMatで求められると思いますが、
そこから回転R, 並進tに分解はできるのでしょうか?
カメラはキャリブレーションされていません。
したいことはstructure from motion(SfM)のカメラ運動推定をしたいのですが…
よろしくお願いします。
cvDecomposeProjectionMatrix
F行列はOpenCVで計算できるから
4章の焦点距離を求めて
5、6章の回転、並進から3次元点を出せばいい
行列計算の順番を間違えなければできるはず
cvLoadImage 関数について質問させてください。
cvLoadImage関数を、main関数内から直接呼ぶ場合は大丈夫なんですが、
クラスを作り、その中のメソッド内で呼び出すと、実行時エラーが発生してしまいます。
(おそらく戻り値がおかしいか、空っぽ)
これはなんでなんでしょうか?
原因が分からず、今はしかたなく cvLoadImage関数を使っている関数を、
inline関数にして使っています。
>>107 クラスがおかしいんじゃね?
ソース見てみないと何とも言えない
うちでは普通に動くけどね
>>107 環境もバージョンも書いてないので、状況はさっぱりわからんが
haar-like学習時に出てくる.vecの拡張子って何かで中身を編集できますか?
createsamples.exeで複数のimgデータを読み込んで、出力された複数のvecファイルのデータを統合したいのですが・・
113 :
111:2010/06/18(金) 14:46:13
追記です
vecファイルでなくても、ようは複数のbmpイメージから1つのvecファイルを生成したいのですが可能ですか?
例えば画像が7つあってそれぞれ1000パターンずつ合計7000のデータを1つのvecファイルにしたいです
114 :
111:2010/06/18(金) 16:37:10
すみません解決しました!
前スレにも同じような質問がありましたが、
haartrainingとcreatesamplesに用いる背景画像(ネガ画像)についての質問です。
現在顔ではなく、顔以外の物体認識を考えているのですが
・背景は一定ではないが同じような背景(場所は違うが常にコンクリートの上 など)
この条件の場合
1.createsamplesに使う背景はコンクリートを使うべきか、なんでもいいのか、使わない方がいいのか
2.haartrainingに使うネガティブ画像も同様に考えていいのか?
3.haartrainingに使うネガティブ画像のサイズはポジ画像を-w 24 -h 24で設定した場合
24*24のサイズがあれば十分なのか
について意見を聞きたいです。
とくに3に関して1枚の画像から小さなネガ画像を大量に作れるか否かで全然変わってくるのでお聞きしたいです。
またもう1つ疑問なのですが、haartrainigでネガ画像枚数を仮に300と指定した場合、
こちらで指定したtxtに画像が10個しかない場合と500個指定されてる場合、どういう動作をしてるのでしょうか?
予想では10個の場合はネガ画像10個指定と同じ処理がされ、500の場合は上から300個の画像を取り出して学習してると考えているのですが・・。
以上長くなってしまってすみません。
>>116 本当にコンクリートの上でしか使わないならコンクリートでいい
ただゴミが落ちてたり草が生えていたり段差があったりと
明暗の変化がある画像を使わないと意味ない
ネガは大きな画像を指定してhaartraining側で切り出して使うので
大きな画像をたくさん用意したらいい
詳細はソースコード読め
IplImage *hoge;
capture = cvCaptureFromCAM(0);
hoge = cvQueryFrame(capture);
として cvReleaseImage(&hoge); とすると
Microsoft C++ の例外: cv::Exception というエラーが出ますが、どうしてでしょうか?
どこにcvQueryFrameの戻り値を解放していいなんて書いてあるんだ?
120 :
デフォルトの名無しさん:2010/06/23(水) 01:25:06
どうしてimage作ったのに解放しなくていいの?
リファレンスマニュアルに「返された画像は,ユーザによって解放されたり変更されたりするべきではありません.」と書いてある。
俺が管理してるから勝手に捨てんなハゲ!
ってことか
cvQueryFrameは管理厨ってことか
dクス
>>117 ありがとうございます
ついでにhaartraining中のBACKGROUND PROCESSING TIMEがステージ数が増えるごとにどんどん
倍化してしまったのでソース見直してきますorz
動画の任意フレームにアクセス出来るようになってくんねーかな
>>125 cvSetCaptureProperty
windows7 64bitでvs2010exを使ってます。
opencv2.1をtbb付きでc-makeでコンパイルして使おうとしてるんですが、以下のようなエラーが出ました。
プログラムは以下のサイトのサンプルです。
ttp://imagingsolution.blog107.fc2.com/blog-entry-149.html 32bitのPCでは同様の手順で実行できました。
どうすれば解決できるでしょうか。
1>------ ビルド開始: プロジェクト: OpenCV20Sample, 構成: Debug x64 ------
1> OpenCV20Sample.cpp
1>c:\opencv-2.1.0\include\opencv\cxmat.hpp(100): fatal error C1001: An internal error has occurred in the compiler.
1> (compiler file 'f:\dd\vctools\compiler\utc\src\p2\wvm\mdmiscw.c', line 2704)
1> To work around this problem, try simplifying or changing the program near the locations listed above.
1> Please choose the Technical Support command on the Visual C++
1> Help menu, or open the Technical Support help file for more information
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
前にOpenCV-2.1.0-win32-vs2008.exe落として2010をreleaseモードにしたら動いた
結局2008に戻したけど
どうみてもコンパイラ側のエラーだろ
opencv 2.1なんだけどひょっとしてパーティクルフィルタ(cvConDensation)って消えた?
2.0まではあった気がしたんだけど・・・
cvauxに移動した
>>130 今ちょうど同じ質問しようと思ってた所だ
未来の俺ありがとう
haartrainingで4000枚の正解画像と2000枚の非正解画像を用いて学習させているのですが、
+----+----+-+---------+---------+---------+---------+
|2850| 27%|+|-25.646017| 0.995070| 0.962694| 0.394669|
+----+----+-+---------+---------+---------+---------+
|2851| 28%|-|-25.264372| 0.995070| 0.962694| 0.394830|
+----+----+-+---------+---------+---------+---------+
|2852| 29%|+|-25.438967| 0.995070| 0.963731| 0.394507|
+----+----+-+---------+---------+---------+---------+
・
・
・
Stage7が半日立っても終わりそうにありません。これって普通ですか?
32*32の画像に対して、-h 31 -w 31とやったのがまずかったのでしょうか
24x24でも1週間はかかる
31x31なら2週間くらいかかる
28×28が9時間で終わったんですが精度が悪かったので大きくしてみました。まさかここまで時間かかるとは・・・
hitrateがずっと0.995070、falsealarmもずっと0.96前後であまり変化していなくて、
正直終わるかどうか不安ですがもう半日様子見てみます!
falsealarm高すぎだろ
137 :
デフォルトの名無しさん:2010/07/06(火) 19:31:13
cvFindhomographyを実行しても、ちゃんとした値が結果を格納するCVMatに入ってきません。
ソースコードを見返して原因となるようなものは改善してみたんですが。。。
OpenCV2.1による不具合の可能性とかはあるんでしょうか。
ちゃんとした値って何だよ
OpenCV-2.1でmp4のFullHD動画を再生させると表示は4fpsぐらいになってしまいます。
ffmpegにvdpauを組み込んでビルドしても早くならないし
cvQueryFrame() でコーデック(h264_vdpau)の指定ってできない?
画像を縦横に何分割かしてパズルを作りたいんですけど、
openCVに画像を分割する関数ってありますか?
範囲指定して普通にコピーすればいいんじゃね
>>142 あぁこんなイメージです!
これで色々がんばってみます、どうもです!
質問です。
OpenCVを使って、ボタンをクリックすると、ダイアログ内のIDC_STATIC_BMPにカメラから取得した動画を転送したいのですが、
動画を静止画の連続と考え、下記の様なコードを組みました。指定したダイアログ内のIDC_STATIC_BMPに描画は出来ましたが、
ダイアログが固まってしまいます。
そこで、固まらない様にする為にはどのようなコードを書けば良いのかアドバイスを頂きたいと思って質問しました。
環境:visual studio 2008 , windowsxp, OpenCV 1.0, MFCです。 よろしくお願いします。
void hoge::OnBnClickedCaptureMove()
{
int key;
CvCapture *capture;
IplImage *frameImage;
// メインループ
while ( 1 ) {
//カメラからの入力画像1フレームをframeImageに格納する
frameImage = cvQueryFrame( capture );
CDC *pDC = GetDlgItem(IDC_STATIC_BMP)->GetDC();
HDC hDC= pDC->GetSafeHdc();
CRect rect;
GetDlgItem(IDC_STATIC_BMP)->GetClientRect(&rect);
CvvImage cimg;
cimg.CopyOf(frameImage);
cimg.DrawToHDC(hDC,&rect);
ReleaseDC(pDC);
key = cvWaitKey( 1 );
if ( key == 'q' ) {
break;
}
}
cvReleaseCapture( &capture );
}
>>145 Onなんとかの関数内でループしたら、ループしている間他のメッセージが処理されないので
ウィンドウの反応はなくなる。
OnInitDialog()あたりでSetTimer()して、
OnTimer()内でループ1回に相当する処理を書くのが普通。
147 :
145:2010/07/12(月) 04:44:58
>>146 アドバイスありがとうございます。
WM_TIMERを使い、ON_Timer()で記述してみましたが、描画された動画がカクカクなってしまいます。
SetTimerは50msに設定しています。
OpenCVのサンプルコードにあるような別窓を作って、そこにカメラから取り込んだ動画を再生するのではなく、
アプリケーションのダイアログ内に動画を再生出来ないかなと思っています。
何か他の方法はないでしょうか?
>SetTimerは50msに設定しています。
w
>>147 方針はそれでいい。タイマー間隔は50msじゃ長すぎるだろうけど・・・
小さくしてまだ滑らかにならないなら、描画処理に時間かかってるか、
カメラ設定でフレーム取得間隔がそもそも長いか。
timeGetTimeとかで処理時間調べてみたら。
それにしてもcvQueryFrame()がフレーム取得までブロックするかどうかとか、
フレーム取得せずしばらく放置したら次取得したフレームは何になるとか、
正確な解説がなかなか見当たらないのがもどかしい。
ここがWindowsプログラミングスレだ
uindouzu
haartraining.exeの実行時の高速化について質問があります。
マシン構成は Windows 7 Professional 64bit
プロセッサはIntelCore2QuadCPU 2.4Ghz 2.39Ghzです。
RAMは8.00GBです。
haartraining.exe実行時に、-mem 5000 と5000MBのRAMを使うようにしたのですが、
タスクマネージャの、メモリ(プライベートワーキングセット)を見ると、
254,264K(この値のまま不動)しか使っておらず、約255MBしか使用しておりません。
更に、CPU使用率もほぼ25%のままです。もっと使ってくれないのでしょうか。
私の設定がメチャクチャ、ないしこうした方が良いというアドバイスがございましたら、是非教えていただけますか?
>>152 CPUが25%なのはOpenMPかTBBが有効になっていないからだと思う
コンパイルオプションで有効にしてコンパイルしなおすと100%使うようになる
(今のバイナリ版は有効になっていない?)
メモリは最大値だから必要になっていないだけじゃないかな
並列化してスレッドが増えると4倍に増えるかもしれない
154 :
152:2010/07/14(水) 17:47:59
私の方でもTBB ONにしても25%しか使わず困っています・・・
そもそも附属のhaartraining.exeでマルチコアCPUを100%使い切る事ってできるんでしょうか??
コンパイルオプションの変更等のソース改変無しで、上記が出来ている方おりますか?
OpenCV 1.1のころOpenMPでやっていたときはQuadCoreでCPU100%(4コア)使っていた
メモリは32bitOSだったから2GBにしていたけど全部使っていた
TBBは使ったことないので分からない
>>154 指定する値が事前に計算しておく特徴ベクトルの最大数だからで
全部使いきるかはデータの量によると言いたかった
あと気になったのでhaartrainingのコードを見てみたけど
OpenMPしか対応が入っていないのでOpenMPを有効にしないと並列化できていないと思うわ
158 :
152:2010/07/14(水) 20:58:56
てか普通にVisualStudioのOPENMPを有効にしたら駄目なの?
もう使わないといいながらOpenMPが残ってるしhaartrainingはメンテされていないのかな
appsだから別扱い?
cvhaartraining.cppを見る限りでは
VisualStudioなら言語プロパティのOpenMPサーポートを「はい」にすればいいだけに見えるよ
CMakeはvcprojを生成しているだけでしょ
たぶんOpenCVはtraincascadeに移行してTBBいれるつもりなんだろな
162 :
152:2010/07/16(金) 14:25:19
ちょっと日本語が分からないんだが、好意的に解釈して
新しくIplImageの変数、現在のdst_imgより減色した、を作成したいのだが、どこを弄れば良いか
クラスタリングが分かっていれば簡単だが、クラスタ数を変更してやれば好きな色数に変えることができる
MAX_CLUSTERSを弄ってみよう
例えば、
#define MAX_CLUSTERS 16
で16色に減色した画像が得られるだろう
>>164 即レスありがとうございます。
164さんが仰った感じにしたいのですが、どこで#define MAX_CLUSTERS 16
を書けば良いでしょうか?
複素数行列の逆行列は求められないんですか><
ここがC言語初心者スレだ
グレースケールの動画から画像を取り出しているのですが、
cvCaptureFromFileで8Bitの動画ファイルを読み込んで
cvQueryFrameで画像を取り出すと24Bitになってしまいます。
IPL_DEPTH_8Uのイメージを別に用意して、毎回cvCvtColorで取り出した画像を変換してるけど、
直接8bitの画像として読み込む方法ってありますでしょうか?
(動画の読み込みで何も指定していないので、読み込んだ時点で24Bitに変換している気もしますが・・・)
>>168 cvcap_vfw.cppいじればできた気がする
まずグレースケールの動画形式があるのか
結局変換しているんじゃないの
haartraingin.exeで、後半になるとBACK_GROUNDPROCESSING TIME がOPEN_MPをONにしても物凄く長くて困っています。
CPUが25%しか、BACK_GROUNDPROCESSINGの時に使われないのですが(trainingの時はCPUをフルに使う)これは仕方のない事なのでしょうか?
OpenCVってPhotoshopのブラシ処理みたいなことはできるのでしょうか?
OpenCVは見た感じ画像に対して何かするためのSDKに思えるのですが。
コンピュータビジョンのライブラリ
OpenCVを使ってグーとパーの判別をしようとしてるのですが、、、
肌色から手だけを抽出することは出来たのですが、
半袖でも出来るよう、肌色の色を消したいのですがいい方法ありませんでしょうか?
ちょっと意味が分からない
手の先検出してそこ中心に判別領域指定とかは?
174です
すみません 腕の部分を消して手だけ抽出したい ということです。
>>176 ありがとうございます。 やってみます。
pythonインターフェイスはいつ安定するんだ
もうctypes-opencvでいいかと思うんだけど
179 :
171:2010/08/11(水) 01:18:15
haartraining.exeで、BACK_GROUNDPROCESSING TIME が OPEN_MPをONにしても長い問題で、自己解決したので報告します。
確か前にもこういった質問があったので、一応必要かなと思って。
結論から言えば、並列化できません。
cvhaartraining.cppでは、スレッドをパラレルにしてBACK_GROUNDPROCESSING TIMEの処理を行っていません。
私はこれを手動でパラレルに設定しましたが、学習がメチャクチャになってしまいマトモなものができなくなります。
ですから、BACK_GROUNDPROCESSING TIMEを縮めることは諦めてください…。残念ですが。
OpenMPはローカル変数が共有されるからよく考えて並列化しないとメチャクチャになる
そもそも分割しやすい問題とそうでない問題があってだな
直接opencvの質問ではなく恐縮なのですが
Discrite AdaBoostとGentle AdaBoostの違いについて詳しく乗ってる
本やHPなどありませんでしょうか?
探してもなかなか見つからなくて・・
環境はWindows XP SP3、 VS2005 PRO SP1 です、
opencv ライブラリを用いて作成した実行ファイルを配布したいので、配布先で
Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) もインストールしてもらったのですが
「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることによって・・・・」
がでます、どうしたらいいでしょうか?
お盆前に同様の状況を経験したがそのときは
DL&インスコしたOpenCV2.1がVS2008でビルドされたものなのが原因で
CVをCMakeでビルドし直して解決したが
2008の再配布パッケージを入れてもよかったのかもしれない
>>182 ランタイムライブラリをマルチスレッドDLLからマルチスレッドにすると幸せになれるかも?
185 :
デフォルトの名無しさん:2010/08/27(金) 23:09:39
186 :
デフォルトの名無しさん:2010/08/28(土) 19:11:48
macへのインストールなのですが、cd opencvで実行すると
dlopen(/opt/local/share/macports/Tcl/macports1.0/MacPorts.dylib, 10): no suitable image found. Did find: /opt/local/share/macports/Tcl/macports1.0/MacPorts.dylib: mach-o, but wrong architecture while executing
"load /opt/local/share/macports/Tcl/macports1.0/MacPorts.dylib" ("package ifneeded macports 1.0" script)
invoked from within "package require macports" file "/opt/local/bin/port" line 39)
と出てくるのですが、これはインストールが成功しているということなのでしょうか?
すみませんが、回答よろしくお願い致します。
失礼します。
動画ファイルから全体の再生時間を取得したいのですが、うまくいきません。
cvSetCapturePropertyにてCV_CAP_PROP_POS_AVI_RATIOを1.0にすれば良いと思ったのですが、
その後cvGetCapturePropertyにてCV_CAP_PROP_POS_MSECの値を取得しても0が返ってきます。
現在はcvQueryFrameで全ての動画を読み込んでから時間を取得しているのですが、もっと効率の良い方法がありましたら教えてください。
よろしくお願いします。
188 :
187:2010/08/31(火) 16:36:10
自己解決しました。
CV_CAP_PROP_FRAME_COUNTでファイルのフレーム数を拾って、フレームレートを掛ければ良かったのですね。
pythonでcvGetAffineTransformやcvGetPerspectiveTransformの呼び出し方分かる人いますか?
引数のconst CvPoint2D32f*をpythonでどう渡せばいいか分からないです。
ctypes-opencv
なら簡単
ctypesの使い方そのまま適用するだけだし
191 :
デフォルトの名無しさん:2010/09/22(水) 14:56:21
192 :
デフォルトの名無しさん:2010/09/23(木) 12:09:07
haar_trainingが学習しても、
時間がかかり、かつ全く使えない件について
なんでもできる魔法のツールではないからな
opencv と face.comのAPI とだったらどっちが認識能力高い?
>>194 そもそもそれを比較することが間違ってる
opencvは画像処理のライブラリ
ちゃんと区別しなさい!
たかし!
>>194 face.com
ただface.comのAPIは回数制限がある
OpenCV-2.1.0-win32-vs2008.exe
これインストールしてVC++2005でちゃんと動くの?
2008持ってないが
VS2005だと、VS2008以降で作られたライブラリにリンクできない問題がある。
VS2005にパッチ入れれば問題ないけど。
>>200 2008ee入れろ
今でもダウンロードできるよ
質問です。
captureFromAviでmpgファイルを開きたいのですが、返ってくるCvCapture*の中身が
空っぽでqueryframeを行っても画像が取れません。
多分コーデックの関係でファイルが開けていないと思うのですが、普通にメディア
プレーヤーでは中身が見れ、また未圧縮Aviファイルは当環境のOpenCVで開く事が出来ます。
どの様にしたら自分の環境でmpgが読み込めるのか、もし分かる方が居たら
教えていただけませんか・・・?
よろしくお願いします。
環境:64bit-Win7 VS2010 OpenCV2.1(x64用コンパイル)
captureFromAviなんだからAVIファイルを入れろよ
>>200 VS2005だと何もかもうまくいかん
zipのほうを解凍してCMake利用してソリューション作成でビルドするとエラーでるし
>>203 cvCreateFileCaptureじゃだめなのかね
って同じ処理か・・・206は無しで
そういえば昔はffmpegあったのにVer上がって消えた?
ffmpegあればmpgも読み込めそうだけど
209 :
208:2010/10/02(土) 22:16:39
普通に3rdpartyの中にあったわスマソ
210 :
203:2010/10/06(水) 09:52:29
そうなんですよ、ffmpegが見当たらなくて・・・
3rdpartyの中にもffmpegが見当たらないので、なんかCmakeの時点で何かが足りてないと
思うんですが、如何せんそれっぽい項目がCmakeの段階で見当たらないんですよね。
もうちょっと色々弄ってみたいと思います。
ありがとうございましたm(__)m
昔はffopencv110.dllというファイルがパスにある場合に
そっち(ffmpegのインターフェース)で読み込むようになっていたが。
これはRGB取得はこんな感じだけど、(xとyは指定ピクセル)
B = img->imageData[img->widthStep * y + x * 3]; // B
G= img->imageData[img->widthStep * y + x * 3 + 1]; // G
R = img->imageData[img->widthStep * y + x * 3 + 2]; // R
HSVの取得は
cvCvtColor(img, img2, CV_BGR2HSV);でRGB→HSV変換してから、
RGBと同じように下のような感じでできますか?
H = img2->imageData[img2->widthStep * y + x * 3]; // H
S= img2->imageData[img2->widthStep * y + x * 3 + 1]; // S
V = img2->imageData[img2->widthStep * y + x * 3 + 2]; // V
MatとVectorとPointを混在させる意味がわからんなぁ
さっさとMat一本に統一して欲しいもんだ
そもそも関数によって引数がPointだったりMatだったりするのがめんどうだ
Pointは画像上の点を表現するもので、
Vecはマルチチャンネルとかを表現するのが主目的なので
普通にベクトル使いたいんならMatでいい。
というか、面倒な局面がわからんのだが
そもそもMatとVectorとPointは全然違うだろ
Matは静的配列だしVectorは動的配列Pointに至ってはただの点
特徴点検出の出力はPoint、F行列や射影変換行列の入力はMat
これで面倒じゃないわけがない
>>218 それintとdouble混在しててめんどいからdoubleに統一しろって言ってるみたいなもんだぞw
vector<Point3f> vec;
Mat M = Mat(vec).reshape(1);
これが面倒?
>>219 その指摘は全然的外れだろ
Pointは2xNのMatで完全に置き換えることが出来るんだから
>>220 プログラム書くたびにめんどうだと思う
特徴点をPoint出力するなら、特徴点を入力とするF行列もPoint入力とするだろ常識的に
>>221 intもdoubleで置き換えられますが
intとdoubleはデータ型なんだからデータのコンテナであるPointとMatを比較すんな
キャリブレーションは入力がPointでF行列は入力がMatみたいに統一されてないのを不便だと思わない?
幅の違いをコンパイルエラーにしてくれる有難さを考えれば、多くの人は不満どころか感謝するだろう。
まあ文化の違いだよ。
すみません、質問させてください.
ConvexHull2した凸包の内側だけを同一色で塗りつぶしたいのですが、
findContoursで取得した輪郭を単純にfillConvexPolyしても上手く塗りつぶせないんです。
何か間違っているでしょうか?
cocoa アプリケーション上で動かすことはできますか?
Macにopencv入れようとしてるんですが、うまくいきません。
Error: Target org.macports.configure returned:
********************
cmake requires the Java for Mac OS X Developer Package from Apple.
Please download and install this package from
http://developer.apple.com/. と出るのですが何をインストールすればいいのでしょうか?
228 :
デフォルトの名無しさん:2010/10/28(木) 16:03:30
質問ですが,
Visual C++2008 expressionにOpenCV2.0を入れてOpenCVをつかってみようとしているんだけど, 入門書のサンプルプログラムにのっているIp1Imageっていう関数がヘッダファイルに定義されてなくて困ってます.
もしかして, この関数ってなくなったりしたの?
OpenCVのバージョンが違うからそこからわかんない.
229 :
デフォルトの名無しさん:2010/10/28(木) 16:14:12
>>228ですけど
IplImageでした
ごめんなさい
haar_trainingの学習法にはコツがあってだな…
教師画像とチューニング次第でかなり改善する
>>227 cmakeと書いてあるだろ
>>228 あるよ
highgui.hをincludeしてる?
まちがいましたjavaです。
>>228 IplImage、普通にバージョン2.1でも2.0でも使える。
1.0用のサンプルソースがそのまま2.1でも使えるし。
IplImageをIp1Imageって書いて
>>229で解決したって事じゃないのか
cvCreateVideoWriter関数使ったら、こんなメッセージが・・・
どうしたらいいんだ
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. You may try recompiling using gcc >= 4.2.
Do not report crashes to FFmpeg developers.
ffmpegはmingwのバイナリ版だろ
>>235 windows版の2.1から出るようになったのに海外サイト見ても誰も話題にしてないから不思議だったんだよな
自前でコンパイルしても解決しないし
239 :
sage:2010/11/04(木) 14:39:36
>>235 自分もCV_FOURCC('M','J','P','G')にすると出る。
でその後cvWriteFrameしようとすると落ちる。
かれこれ1カ月くらいこれで悩んでる・・・
haartrainingで生成されるxmlについてどんな特徴使ってるのか見てるのですけれども
<_>3 0 18 4 -1.</_>
<_>3 2 18 2 2.</_>
とか
<_>8 18 14 4 -1.</_>
<_>15 18 7 2 2.</_>
<_>8 20 7 2 2.</_>
の意味がよくわかりません・・・
上側は恐らくx、y、x、yと座標を指定していて最後の-1と2が白と黒の領域を表しているというのは何と無くつかめるのですが、
下がさっぱりです・・・回転させた特徴・・・?
どなたかわかる方いたら参考サイトでも何でも良いので教えてもらえないでしょうか?
>>239 2.0aはmotion jpegで書き出し出来る
なぜか2.1では落ちるようになった
>>241 動いたーーー!!!!
と思ったら絵が取れてない・・・
今度はcvDecodeImageが悪さしてるっぽいなぁ
それでも一歩前進したわ。ありがとう。
カメラからの録画についてですが、なかなか録画時間=再生時間になりません。。
cvWaitKeyで1フレームあたりの時間(1000/fps)から、
前回キャプチャからの経過時間を引いた値をwaitしているのですが
録画時間<再生時間になったりその逆になったりします。。
うまい設定の方法ありませんか?
>>235 俺もいろんなコーデック入れて試したけど、上手くいかなかった
仕方ないから圧縮無しで動かしてる
>>243 1000fps=1sと思って無いよな?
てか秒間1000毎のカメラってどんなんだ?
fps は f/s。1000/fpsだと1000s/fで激遅。
247 :
243:2010/11/10(水) 12:58:07
1000/fpsは
1000msec/設定フレームレートのつもりで書きました。
フレーム間隔を計算するためです。
cvWaitKeyって実際10ミリ秒位の精度じゃないですか?
意訳するとこうか?
直前のフレームからの経過時間だけでタイミングを取るという
阿呆なことをしてるのですが全体の時間が正しくなりません。
どのようにするのが正しいのでしょうか?
249 :
243:2010/11/11(木) 07:41:46
そうですw
正しいやり方教えてもらえませんか?
経過時間を使わず絶対時間を使えよw
>>243 録画中、timeGetTime()関数とかで1フレーム毎の録画時間(現在時刻)を記録しておく。
再生時にcvWaitKey(IntervalTime[frame])とかで録画時と同じタイミングで各フレーム
を表示していけばいいんじゃないだろうか。
質問者はもう分かっているんだろうけど、そろそろ回答付けとかないとあれだな
一応、この手の処理では基本中の基本なんだが
× 前のフレームからの経過時間(相対時間)でタイミングを取る
○ 基準時刻からの経過時間(絶対時間)でタイミングを取る
質問です.
CvSparseMat A
CvMat B
CvMat x
今,このように行列が3つあります(Aだけスパース行列です).
これらを使って,
cvSolve( A, B, x, CV_SVD);
としたのですが,
○○○.exe の 0x766db09e でハンドルされていない例外が発生しました:
Microsoft C++ の例外: cv::Exception (メモリの場所 0x0022e660)。
とエラーが発生してしまいます.
AがCvMatだとうまくいくのですが.
CvSparseMatに対応したcvSolveのような関数がありましたら教えてください.
254 :
243:2010/11/15(月) 16:20:36
みなさんありがとうございました。
相対時間を使うからややこしくなってたんですね。
初心者なもんで。。
どうにか思った通りの速度で録画&再生ができるようになりました!
256 :
デフォルトの名無しさん:2010/11/16(火) 20:32:28
質問です。
たとえばequalizeHistなどが何をやっているか見るために
visual studioでデバックをしようと思ってるのですが、当然中身が見れません。
ブレークポイントが使えない場合って変数の動きなどはどうやってみればいいんでしょうか?
どういうこと?変数の中身はprintfすればいいし、ソースが見たけりゃ、
OpenCVのソース版をダウンロードして、equalizeHist関数を探せばいいさ。
258 :
257:2010/11/16(火) 22:29:26
ちなみに今探してみたらhistogram.cppっていうソースファイルにequalizeHist関数があったぞ。
259 :
256:2010/11/16(火) 22:38:59
>>257 ソース追うのではなくて、値がどう変化してるかを見たかったのです。
ソース版関連付けさせて動かした方が後々楽なんでしょかね
equalizeHist(src, dst)のsrcとdstを比較するだけじゃ物足りないってこと?
中でどうなってるかは、やっぱり
>>285のソースを関連付けさせてその中で
ブレークポイントを置くしかないわな
261 :
256:2010/11/16(火) 23:04:40
>>260 その通りです、例にそれを出しましたが他にも変数の変化見たいものがいくつかあるので!
ありがとうございます、今度ソースコード関連付けてみます。
USBカメラの映像をキャリブレーションしてるんですが、
初めは40msくらいなんですけど、20秒ほどかけて15msまで段々落ちていきます。
原因はなんでしょうか。初めから15msで動作させたいんですが。
>>262 そういうカメラの仕様なんじゃないかというくらいしか言いようがないなぁ。
プログラム起動したてはWindowsが他の処理にCPUを使ってるからかもしれないし。
>>239 リリースビルドだと例の文字列が出力されるけど
cvWriteFrameで落ちずに動画ファイルは作れてる
デバッグビルドだと落ちる
>>262 カメラの自動露出調整とかで、フレームレートが変わってるんじゃ?
カメラの焦点距離を求めたいのですが、cvCalibrationMatrixValues関数ってどんな風に
使えばいいんでしょうか?
第一引数は内部パラメーター(A行列)、第二,三引数は横縦ピクセル数、までは分かるのですが
第四,五のアパーチャ幅と高さってどの部分のことなんでしょうか?
あと、その単位と、返ってくる焦点距離と主点の単位ってmmなのかcmなのか何なんでしょうか?
使い方は例えば
{
cvMat *calibMatr=カメラ行列;
int imgWidth=Width,imgHeight=Height;
double apertureWidth=0,apertureHeight=0;//(不明なのでとりあえずデフォ値の0に)
double fovx,fovy;
double focalLength;
CvPoint2D64f principalPoint;
double pixelAspectRatio;
cvCalibrationMatrixValues(calibMatr,imgWidth,imgHeight,apertureWidth,apertureHeight,
&fovx,&fovy,&focalLength,&principalPoint,&pixelAspectRatio);
}
と実行すれば、fovx,fovyに画角(dgree)、focalLengthに焦点距離(単位不明)、principalPointに
主点の長さ(単位不明)、pixelAspectRatioにアスペクト比が入る。ってことであってますよね?
今回、カメラ行列はCalibrateCamera2で求めた物、そして、アパーチャサイズに0や適当な数値入れると、
この出力結果がぐちゃぐちゃな数値出てしまいました。
GoodFeaturesToTrackって、小数点以下3桁まで出力しますけど
何桁まで信頼できますかね
268 :
デフォルトの名無しさん:2010/11/30(火) 19:48:07
質問です。フレーム間差分のサンプルが乗っているサイト知りませんか?
ipl25.exeをダウンロードしてきたのですが
PackageForTheWeb Stubというコメントが出てきてインストールできません。
わかる方いたらお願いします。
vistaとは相性悪いんかな
272 :
デフォルトの名無しさん:2010/12/02(木) 17:17:53
昨日からOpenCVを触り始めたものです。
Essential OpenCVという本とリファレンスを検索して分からなかったので質問させてください。
現在Picture in Pictureの映像撮影ソフトを作ろうと思い、
初めに解像度の違う画像を重ねるところからやろうと思っているのですが、
調べてみても「解像度が同じものを合成」もしくは「横に並べて連結する」関数しか見つかりませんでした。
解像度の違う画像を重ね合わせることができる関数を教えていただけると助かります。
よろしくお願いします。
開発環境はVistaでOpenCV 1.1pre使ってます
cvSetImageROI(大きい方の画像のROIを小さい方の画像のサイズに設定)
cvCopy
cvResetImageROI
の順でどうでしょう
横に並べて連結する関数なんてあったのか…
名前教えてくれ
>>274 ありがとうございます。
横に連結する関数ですが私の勘違いでした。すみません。
calcOpticalFlowPyrLKをc++仕様にしたら、3ms→40msになってわろた
昨日はありがとうございました。
アドバイス通りにやったらできました。
2種類のカメラを認識させ、Picture in Pictureのようなものができました。
この映像ソースをDirectShowフィルタで扱えるように頑張ってみます。
>>276 C++のcalcOpticalFlowPyrLKのソースを書き換えて高速化すればいいじゃん
cvCreateCameraCapture(0);でUSBカメラ認識させてるのですが、デバイス名ってどうやったら参照できますか?
_
openCV2.2が公開されてたっぽい
282 :
デフォルトの名無しさん:2010/12/07(火) 07:53:36
Ver2.2の人柱マダー?
>>282 基本はキャプチャも動画も一緒じゃね
1枚ずつ取り出して処理する訳だし、リンク先の情報で出来ると思うが
とりあえず、「何が」上手く処理出来ないのか言わないと、エスパーじゃないからわからん
追記
正解画像(20枚)を記述した.txtを-info で指定
-num 4000にして実行していますが、
サンプルが20枚分しか作成出来ません。
原因はなんでしょうか?
OpenCV2.2をダウンロードしてビルドしました。
include\opencv2フォルダの中の各フォルダ(core、highgui等)の中が空で、
Cmakeを使ってビルドした後も空です。
なのでincludeフォルダの設定などをきちんと行っても、「ヘッダファイルがない」
というエラーが出てサンプルファイルがビルドできません。
試しにVisualStudio2010用バイナリインストーラでインストールしてみると、
core、highgui等のフォルダの中にはヘッダファイルが入っています。
サンプルファイルのビルドも正常にできます。
Cmakeなどでソースからビルドされた方がいましたら解決策を教えてください。
287 :
286:2010/12/09(木) 19:39:23
自己解決しました。バッチビルドの際に「INSTALL」にチェックすればいいみたいです。
>>285 -infoで指定した.txtに矩形位置書いてる?
>>288 書いてます。
過去スレ漁ったら同様の質問がありました。
mergevecを使ったやり方が提案されていたのですが、
使い方を詳しく説明していただける方いらっしゃいませんでしょうか?
OpenCV2.2でcvCvtColor(CV_RGB2GRAY)使ってる人いない?
2.1で使えてたのに
dst.data == dst0.data in function cvCvtColor
でエラーになる
サンプルコードは動くのに自作のが動かない
>>291 同じ領域を指定してるからじゃね。
もともとぶっ壊れていたのがassertionついて分かりやすくなっただけだろ。
変換元と変換先の画像を別に用意する必要があるのでは。
>>292 >もともとぶっ壊れていたのがassertionついて分かりやすくなっただけだろ。
2.1と2.2でソースが全然違ってたからそうではないのかも.
>変換元と変換先の画像を別に用意する必要があるのでは。
data0は変換する前にOpenCVで自動に確保された画像で,
dataはOpenCVで処理が終わったあとの画像っぽいから,
こちら側で渡す引数は間違えてないはず.
CvtColorはOpenCVの他のモジュールでも使っているから
バグってることはないと思うんだが。
cvCvtColor(A,B,C);
でA==Bであるとか、Cに対して、AやBのチャンネルや型が合ってないとかではないのか。
assertion出てるソース見たら原因は分かると思うが。
再確保されているってことは、サイズと型が間違っているんだろ
SIFT特徴量が特許の関係で入れられないはずだったのに
入ったって聞いたんだけど
特許切れたってこと?
>>296 商用に使わなければ問題ないんじゃない?
SURFやSUSANも特許取られている。
オライリーの詳解OpenCV、新しいバージョンで出ないかなぁ
基本的には変わらないんだろうけど、バージョンが新しくなる度に悩む
せめて2.0で出してくれー
>>235 これ、Win環境で2.1だと必ずこうなる??
ずっと悩んでるんだけど、だれか解決できた人いないのかなー?
winの2.1だとリリースとデバッグ、さらに拡張子によって出たり出なかったり
2.2は改善されてるんだろうか?
openCV1.0なんですが、サンプルのlkdemoが動作しません。
カメラは接続していないのですが、AVIファイルをexeにドロップしても、
何もせず一瞬で終了されてしまいます。
どなたか原因わかる方いらっしゃいませんか?
カメラつなぐか、めんどくさがらず、コマンド引数にファイルパスいれてみ。
Ikedemoはカメラからの映像を取得する物で、動画ファイルを見る為の物じゃない
OpenCV2.1でAVIファイルをドロップしてみたが、やっぱり一瞬で終了した
>>303 ソースみてみ。AVIファイルの引数は解釈できるようになってる。
305 :
303:2010/12/28(火) 14:41:21
>>304 おおう、cvCaptureFromAVIも使ってた
適当なアドバイスすまんかった
しかも、IkedemoじゃなくLkdemoだし
306 :
301:2010/12/28(火) 18:32:09
コマンドプロンプトで
lkdemo test.avi
と入力しても
Could not initialize capturing...
と表示されるだけです。
コマンド合ってますよね?
パスあってるの?あと、OpenCVって圧縮AVIいけたかね?とりあえず、非圧縮AVIで試してみるのか吉
IPLてもう入手不可能ですか?
ぐぐっても見つからないんですが
309 :
デフォルトの名無しさん:2010/12/29(水) 18:50:03
トラックバーの値に対応させて、出力画像を変更するようなことって可能でしょうか?
トラックバーの値1→画像1
トラックバーの値2→画像2
トラックバーの値3→画像3
のようなイメージで、簡単な画像ビューアのようなものを作りたいのですが……。
>>308 IPLで必要な関数はほとんどOpenCVにあると思うんだが
>>309 cvCreateTrackbarとcvShowImage使えばたぶんいけると思う
311 :
301:2010/12/29(水) 20:26:22
>>307 非圧縮AVIです。
なんか他にもAVIの条件あるんですかね?
>>312 フルパスでもだめです。
申し訳ないですが、素人なので詳しく書かせていただきます。
ちなみにAVIファイルはサンプルと同じ場所に置いてあります
現在のディレクトリ
C:\Program Files\OpenCV\samples\c>
コマンド
lkdemo C:\Program Files\OpenCV\samples\c\test.avi
lkdemo test.avi
いずれもダメでした。
ためしにWEBカメラを接続して実行したら正常に動作しています。
追記
いずれの場合でも
Could not initialize capturing...
と表示されるだけです
>>315 出来ました…
ご指摘の通りのようです。
しっかりと圧縮の見きわめができず申し訳ありませんでした。
お手数お掛けしました
ありがとうございます
最近になってopencvを使用し始めたのですが、少し行き詰ってしまったので質問させてください。
サンプルプログラムの「demhist」を改造してカラー画像でもコントラストなどをいじれるようにしたいのですが
これは「updateBrightnessContrast内でチャンネルを分割する処理」を加えることで実現できるでしょうか?
それとも、もっと根本から改造しなければ実現するのは厳しいでしょうか?
何かちょっとしたヒントでも教えていただけたらありがたいです。
よろしくお願いします。
318 :
317:2010/12/31(金) 12:34:53
試行錯誤していたら自己解決することが出来ました
スレ汚し失礼しました
301に便乗
lkdemoに非圧縮aviを読み込ますことはできますか?
出来るならやり方を教えて頂けないでしょうか。
ffmpeg使えば読める
AVIファイルをcvCaptureFromAVIから読み込むとめちゃくちゃ遅いんですけどなんとかならないのでしょうか?
USBカメラからだと全然速いのですが。。。
>>321 カメラとAVIファイルの縦横サイズは?
カメラは10cm×5cmくらいです
AVIファイルのサイズはどうやって測るのでしょうか
いいセンスだ
325 :
デフォルトの名無しさん:2011/01/04(火) 12:52:59
新年早々すみません。もし分かるかたがいらっしゃいましたらお教えください。
症状:cvWaitKey()が効かない。(何を押しても-1しか返ってきません。)
例えば
while (1) {
int key = cvWaitKey(TIMEOUT);
printf("%d ", key);
if (key != -1) break;
}
と書いて、コンソールに値を表示させながらキーを押してみても、
-1がすごい速さでどんどん表示されるばかりで、whileループを
いつまでも抜けません。
TIMEOUTの値は0, 1, 2, 10, 33, 100, 1000で試してみましたが、
どれも変化はありません。コンソールに-1が連続して表示される
速度も変化ないように見えます。
cvWaitKey()を使うに当たって、他に必要な準備や前提条件が
あるのでしょうか?
当方の環境はWinXPPro、Visual Studio 2008 Express Editionです。
よろしくお願いいたします。
>>323 縦×横が何ピクセルか(解像度)を聞いたつもりだったんだけどな。
AVIファイルは右クリック+プロパティで見れる。カメラの解像度は説明書に書いてあると思う。
>>325 まさかウィンドウを作らずにcvWaitKeyを呼んでるってことはないよね
>>325 TIMEOUTが0の時でも次の処理にすすむってことはTIMEOUTの値の変更がうまくいってないんじゃないの。
変数で指定してるんならソース内で数字で直接指定してみたら?
>>322 カメラはISightで640*480で
AVIは720*480です。
>>322 あと323 != 321で、
329 = 321です。
331 :
325:2011/01/04(火) 20:14:13
325です。
>>327 ご回答ありがとうございます。ウィンドウは作っています。
例えば下のようなソースでも、cvQueryFrame()とcvShowImage()は正常に
動作しているのに、cvWaitKey()は-1しか返してこないのです。
CvCapture *capture;
IplImage *frameImage;
char windowNameCapture[] = "Capture";
capture = cvCreateCameraCapture(0);
cvNamedWindow(windowNameCapture, CV_WINDOW_AUTOSIZE);
while (1) {
frameImage = cvQueryFrame(capture);
cvShowImage(windowNameCapture, frameImage);
int key = cvWaitKey(TIMEOUT);
if (key != -1) break;
}
.NET Frameworkの何がしかとか、プラグインとか、何かが私の環境から
抜けているのでしょうか・・・。
>>331 327だけど、
このままコピペしてint TIMEOUT = 1とかで普通に動いたが(win7 openCVpre1.1)
ソースあるのだしcvWaitKeyを追ってみたら
333 :
325:2011/01/04(火) 22:51:27
325です。
>>328 ご回答ありがとうございます。TIMEOUTは直値で与えています。
>>332 やっぱり動いちゃいましたか。まあ、そうなんでしょうね・・・。
いくらやってみてもだめなので、とりあえずcvWaitKey()の代わりに
cvSetMouseCallback()を使い、マウスのクリックイベントで代用することに
しました。(これは正常に動作しています。)
Keyが使えれば、もっと多くの機能をアルファベットでコマンドっぽく
処理させることができると考えていたんですが・・・。
暇ができたらソースも追っかけてみます。
ありがとうございました。
Windows だったら、どこかに exe アップロードして他人の環境でも同じ動作かどうか確認できるんじゃね?
動作が同じならコンパイル環境だし、動作が違うなら
>>325 の環境でだけ発現する何かだし。
ためしに動かしてみてくださいってexeアップロードされても困るのだが
336 :
デフォルトの名無しさん:2011/01/05(水) 05:46:23
exeはねえな
せめてソース
ソースが
>>331そのままなら、TIMEOUTの定義も値の指定もしてないから動かないのは普通だと思うが。
>>332はそれでちゃんと動かせてるわけだし。
ソースも環境も曖昧だからなー。
VC++でコンソールアプリケーションなら.net系は関係ないだろうし。
2.2のC++のソースのほうで
VideoCaptureから読み込んだ画像の型をCV_32FC3に変換を行いたいのですが、
VideoCapture vc(0);
Mat m;
Mat converted;
vc >> m;
m.assignTo(converted, CV_32FC3);
imshow("dst",converted);
waitKey(10);
.
.
.
というソースで画像を表示してみても真っ白です。
何か勘違いしているのでしょうか?
assignTo は copyToじゃない?
あ、違う
convertToだ
Qt使いたいんだが、CMakeで"QT_QTCORE_LIBRARY_DEBUG (RELEASE)"って何を指定すればいいの?
libフォルダのそれらしい奴はだめだったし
windows7 32bit VS2010 OpenCV2.2です
342 :
341:2011/01/09(日) 22:53:43
自己解決
ビルドしないだけだった
画像から肌色に近い色で、ある程度の大きさの領域の検出と
前にあるものを明るく奥にあるものを暗く(重なり?奥行き?)する
処理をやりたいのですがどのようにやればいいのでしょうか。
奥行き取れてるの?奥行きの判断方法って何?
たしかOpenCVってバンドル調整の機能つんでなかったっけ?
・・・まあ今ならkinect買うのが手っ取り早いと思うけど
>>235 これ、cvCreateFileCaptureでも同じメッセージが出て読み込み出来なかった(´・ω・`)。
非圧縮aviかmpgなら大丈夫。
まあJavaCV経由だから参考にならんかも知れんが。
長方形抽出して統計的にパースを求めて、そこから3Dを構成してるのかな?
まあ言うは易く行なうは難しだな
うは、すげーw
画像を構成する直線を調べて、消失点決めてって感じかなあ
写真なのに列車が横を見あげるってすごい不思議な感じだw
GetOptimalDFTSizeはバグってない?
2^i*3^j*5^kピッタリだとそれより小さい数字返してる気がする
サンプルのGetOptimalDFTSize(sz-1)の-1も意味がよく分からん
353 :
351:2011/01/12(水) 13:09:21
ごめん
「2^i*3^j*5^kピッタリ」じゃなく、それより大きい場合だ
まぁOpenCVでDFT使ってる奴っていないんだろうけど
レナとかマンドリルとか標準画像データベースっていうのはよく見ますが、
動画のデータベースってありますか?
用途によるがある
人検出って横顔とか、斜めの顔ではできないの?極力ライブラリ等を使いたいんだけど。
自分で教育すれば横顔や斜めでも大丈夫じゃね?
今のOpenCVなら全身とか上半身の教育データも入ってるみたいだから
上手く組み合わせてみてもいいだろうし
knnおせえよ
中身はFLANNだ
360 :
デフォルトの名無しさん:2011/01/22(土) 23:29:50
added Kinect support (initial version without settings configuration yet) and sample on usage
だってさ
kwsk
記事はどこぞ
svnのコミットログ
OpenNIと統合すんのかね
読み込んだ動画の隅っこに再生時間を表示させたいんですが(100分の1秒くらいまで)
なんか方法ないでしょうか?
FPSとフレームカウントでなんとかするしか・・・
>>365 ありがとうございます。
ttp://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1053269440?fr=pofee_pc を参考にしてlkdemoの特徴点座標をCSVファイルに書き込むプログラムを作っているんですが、
加えて、その座標の時の時間(もしくはフレームカウント)を表示したいんです。
現在は
cvCircle( image, cvPointFrom32f(points[1][i]), 3, CV_RGB(0,255,0), -1, 8,0);
fprintf(fp, "%d,%d,%d\n",(int)(points[1][i].x), (int)(points[1][i].y),□□□);
となっているんですが、□□□の部分にどのような関数を使えばいいか悩んでいます。
cvGetCapturePropertyやcvSetCapturePropertyのあたりだと思うのですが、
どのような記述をすればいいでしょうか。
その他、付け加える記述もあればどなたか教えていただけるとありがたいです。
的外れな方法だったらすいません。
>>366 double fps = cvGetCaptureProperty( capture, CV_CAP_PROP_FPS );
でFPS取得して
動画のフレーム取得するときに
cvQueryFrame(capture);
とかやってるんだろうからそこんとこに
framecount++;
とかしとけばいいのでは?
framecount/fpsで時間でるし。
んで質問なんですけど
cvSetImageROI(tmpmsk, rect);
cvSet(tmpmsk, cvScalar(255));
cvResetImageROI(tmpmsk);
この処理の間に微量なメモリリークが発生してるっぽいんですけど
なにか後処理が必要なのでしょうか?
tmpmskの解放はしてあります。
>>367 具体的にそこでリークしているのはちょっと考えにくい気がする。
初期化と解放のコードは?
メモリリークを検出した手段は?
微量というが何バイト?
Kinect強化進んでるな
replaced own point cloud computing by OpenNI ConvertProjectiveToRealWorld()
あとCUDA化も凄まじい勢い
OpenCVって3次元plot用の関数って存在しますか?
ない
>>367 CV_CAP_PROP_POS_MSECじゃだめなの?
質問なんですが、64bit対応前に実装された関数が64bit環境だと使えないってことありますか?
具体的にはcvFindFundamentalMat()で返される基礎行列が誤っていて、
32bit環境で実行すると正しい値が出てるんですが…
環境はWin7,VS2008,2.1です
C++のAPIはライブラリビルドしたのと同じバージョンのVS使わないと、
ライブラリの外と中でstringが別モノだったりして死ぬ。
みたいな事を自分は経験した。
>>373 です
>>374 thx です。
ライブラリィ作成時のコンパイルバージョンって、影響するのでしょうか?
Windows 7 64bit(32bit 環境)
Visual Studio 2010 professional
この環境のほうは
cmake-2.8.0-win32-x86 使ってOpenCV2.0 のライブラリィを
作成しているのですが、その時にVS2010ではライブラリィがビルドできないので
VS2005で作成したライブラリィを使ってサンプルコードなどをコンパイルしています。
ただし、もう一つの
VMware Windows XP SP3
Visual Studio 2005 professional
こっちの環境はライブラリィの作成も、サンプルコードのコンパイルもVS2005なのですがやっぱり、こけてしまうのですが・・・・?
少なくとも2005ではimreadを使ったプログラムは動かした事がある。
自前でビルドしてるならデバッガで追ってみれば。
>>376 ありがとう、解決しました
もう一つの環境といいますか
Windows 7 64bit(32bit 環境)
Visual Studio 2005 professional
cmake-2.8.0-win32-x86
OpenCV2.0
このパターンを試したら、imreadを動かすことができました。
たの環境では
デバッグすれど、imreadの部分にステップインすると、いきなり
fopen(filename.c_str(), "rb");
ファイルはあるのに、ファイルが無いなどと、わけの分からんエラーで落ちまくります
filename.c_str()がstd::string から char * のキャストなので
まさに同じstring型でも、コンパイルが通らないといったことなんでしょうか??
ライブラリをビルドしたバージョンが違うとstringとかのインラインになってるとこが、
ライブラリの中と外で食い違ったりする。代入とかでメモリ確保したり開放したりするあたり。
なんかニヤニヤされてるみたいだから、全然見当違いなのかもしれないけど。
2値画像中から抽出した輪郭の中で
ある輪郭の端から別の輪郭の端までの距離がしきい値以内であればその輪郭を結合
という処理をしたいのですが何かいい方法はありませんか?
モルフォロジー演算はなるべくしない方向でいきたいのですが
>>381 輪郭線抽出してから、輪郭線をある程度の精度で近似した上で、輪郭1の各頂点ごとに、輪郭2の各頂点との距離の最短を求めて、
その全部での最短が一定距離以下だったら・・・みたいにすればできるだろうけどね。
輪郭線近似した上で包含多角形(Convex Hull)を作ってから各頂点ごとに・・・
とすれば、異常に輪郭線入り組んだりして長い場合にも対応できるかも。
cvCreateVideoWriter(filename, 0, fps, cvSize(width,height), 0) で保存したAVIファイルを
cvCaptureFromFileで読み込めないんですが どうしたらいいでしょうか?
ファイルが全く読み込めないのか、変な映像が出力されるのかがわからんが、
一番最後の0を1にしてみるとか
>>384 返答ありがとうざいます。
OpenCV自体が非圧縮を読み込みできないみたいでした。
非圧縮で保存できるのに、読み込めないって地雷はひどいw
>>385 そのバグ前からあるけどimage->imageData += 0x400すれば正しくでるはず
Intelが開発したってあるけど
AMD環境でもちゃんと動きますか?
動作するし開発もできる
48Bit(16Bit x 3)の画像処理について質問です。
ざっと見たところOpenCVは
ファイルの読み込みは48Bitに対応。
ファイルの書き込みは24Bitまで。
のようですが合ってますか?
で、そうだとして内部処理は48Bitで行なわれているんでしょうか?
もしかしてロードした時点で24Bitに落ちてるのでしょうか?
はじめまして
当方学生でプログラミングはほぼ初心者なのですが
画像の解析にopenCV1.1をつかっています。
ハフ変換で画像中の円の検出をしたいのですが
デバッグ後に画像が表示されなくて困ってます
何を質問したらいいかも分からないほどの知識しかなくて申し訳ないのですが
どなたかよろしくお願いします。
まずはソースを貼りなさい
初心者は特に勝手に省略しないこと
質問です。
たとえばTIFFファイルをLoadImageで読むと適切なIplImageが生成されますが、
パイプでやってきたTIFFをIplImageに格納するにはどうしたらいいでしょうか?
CreateImageで生成してからTIFFの中のビットマップ情報を読んで入れていく
という方法をとればできるのはできると思いますが,それだとTIFFデータから
Bitmap情報を取り出すインターフェイスも必要になるので、OpenCVの機能で
できないものかなと。
>>393 OpenCV 2.2 win32のソースを元に話すけど、
highguiモジュールのソースを読むと、
grfmt_tiff.cpp, grfmt_tiff.hppってのが
TIFFのエンコーダー、デコーダーだけど、なんかファイル名を与えて開く方法しかなくて、tif_win32.cってのがそもそも
ファイル名をもらって開くような形になってるだろうから、一旦ファイルを保存して開く以外の簡単な方法はないんじゃないかな。
それか自分でlibtiff叩くしかないような。
BasicImageDecoder::m_buf_supportedが0じゃないいくつかのフォーマットに関してはメモリ上からも開けるみたいだけどね。BMPとか。
>>394 サンクス。最悪tif_win32.cを弄るという手もありますね。
ちなみにBMPをメモリから開く方法について、公式のドキュメントみても
見つけられなかったんですが、参考URLとかあったら教えてください。
AVDマネージャで作成したAVDのデフォルトの保存先を変更できますか?
ちなみにエクリプスは3.6.1helionです。
すいません、上はスレ違いです。
申し訳ないです。
>>398 あー!! Cの関数ばかり探してましたが、C++用は違うものがあるんですね。
全く気付きませんでした。これによるとtiffでも読めそうな感じですね。
やってみます。
400 :
デフォルトの名無しさん:2011/02/22(火) 09:11:17.08
>>392 遅レスすいません。
ソースは長すぎて貼れませんでした・・・
http://oshiete.goo.ne.jp/qa/4416952.html ここの回答者のソースコードをコピーして
file nameを自分の読み込みたいファイル名としてビルドしました。
しかしデバックすると
Bad aregument(Bad image header)
in function cvCloneimage,.\caxarray.cpp(3615)
とエラーが返されます。
環境はOpencv1.1pre、VC++2008です。
どなたかご教授よろしくお願いします。
>>399 いや、残念ながらgrfmt_tiffにはバッファから読む方法は実装されてないので、自前実装の参考にはなるかもしれないけど、使えないと思います。
>>401 質問者は僕ではないです
いやホントにそれは重々承知なんですけどw
1から学びたいくらいおもしろい分野なんですけど
なにぶん残された時間が少なくて・・・残念です・・
とりあえず読み出すファイルをbmpにしてみたら
プログラムは動きました!
誤検出が多すぎでしたけど・・w
こんな初心者のために質問に答えてくださった方
本当にありがとうございました。
またお世話になるかもしれませんがその節はよろしくお願いします。
404 :
デフォルトの名無しさん:2011/02/25(金) 18:11:24.66
GigEカメラから取込んだ画像をOpenCVで処理したいのですが、全くどこから手を
付ければ良いのか、、、ヒント頂けないでしょうか、bmpファイル程度は取込みは出来ます。
お願いします。
>>404 まずはGigEカメラから取り込んだ画像を、自作のプログラムでファイルに保存するか
画面に表示するようなものを作ることができるかどうかかな。
それができればOpenCVのIplImage型の変数にコピーしていろいろできると思うが。
補足:
UVCじゃないドライバ付きのUSBカメラなら↓のサンプルですんなり行ったんです。
(2.2なのでhighgui.lib→opencv_highgui220(d).libの追加は必要でしたけど)
http://opencv.jp/sample/video_io.html#capture (Windows7)64bit環境で使える安いUSBカメラって大抵UVCなんですね。
UVCじゃないカメラはドライバが32bitしか対応してないし。
安かったUVCカメラを3台買った後、サンプル動かしてwktkからドン底でしたが
これで…もう3台買っといてもいいような気がしてきました。
408 :
デフォルトの名無しさん:2011/02/28(月) 18:53:30.93
ハードルが高いこと分りました。GigEカメラの前にUSBカメラから初めます。アドバイス有難う御座います。
あとがき:
結局USBカメラを4台追加注文しました。
しっかしPCの別系統(って言うのかな)のUSBポートに差さないと640x480の
2台同時表示でも片方のfpsが著しく落ちますね…。
fpsを落とさずに同時に取り込めるのはウチのPCだと3台が限界かなぁ。
USB3.0のポートに差したらOKかもとか淡い期待がないではないですが、
カメラが7台全て届いたら試してみよう。
UVCは複数カメラ簡単にできるんだ。
よかったら、複数うまくいった型番教えて。
いま、複数カメラに興味ないけど、前は苦労した><
カメラ毎にUSBボード買ったりとか。
411 :
409:2011/03/01(火) 03:24:33.35
>>411 UVCなら何でもいいような気もするけど俺が使ってるのは↓です。
俺が確認したのはカメラ2台までで3台以上はまだ試してないです。
WEBカメラ(小型USBカメラ・130万画素・一発接続・ブルー) 400-CMS005BL 【サンワダイレクト】:400-CMS005BL_O
http://direct.sanwa.co.jp/ItemPage/400-CMS005BL_O カメラ毎にUSBボードとは大変でしたね…。
ただ今でもなお(認識の問題は別にしても)多数のカメラで
速度を出したいときにはボードが必要になるかもしれませんね。
追記:
昨日まで何の問題もなく動いていたプログラムが
突如cvCopyでエラーを出すようになった…。
再起動してもダメ。デバイスマネージャ上で認識はされてる。
結局、原因は不明のままだけどMS Expression Encoder4で
USBカメラをソースに指定して取り込みを試した(うまくいった)後、
プログラムを実行させたら問題なく動いた。なんだったんだろう…。
エラーってどんなエラーなの?
コピー元よりコピー先のサイズが小さかったりするとエラー出た気がするけどそれじゃないの?
>>411 ありがと。
安くて遊べそうなカメラですね。
414 :
411:2011/03/01(火) 22:58:13.25
>>412 レスありがとうございます。
そうみたいです。cvCopy()の中のMat::copyTo()の中のmemcpy()でエラーです。
memcpy()の第1・第2引数は非NULLで第3引数は921600(=640x480x3)なので
領域越えてるみたいですね。
しかしまったく同じプログラムをExpression Enocderを使用後に
実行するとエラーを吐かないという現象は…EEの使用でたまたま都合のいい値が
デバイス(ドライバ?)にセットされたか何かかな。
プログラムが偶然に頼っているのはまずいから原因さがしてるけどcvCopy()に与えた
IplImage*はどちらも正しくimageSize=921600。うーんもし何かわかったら報告します。
メモリのバッファオーバーは、OpenCVとか関係ない
普通のWindows環境なら、メモリの管理ページを超えないと落ちない
管理ページ内のバッファオーバーなら、そのページ内でメモリを壊しながら動き続ける
壊したメモリの値がおかしくなって挙動が変になる場合もあるがw
つまり同じプログラムでも、その呼び出しの前後関係によっては
メモリ管理の状況が変わるから落ちたり動いたりしてるだけ
…メモリのバッファオーバーのバグを直せば良いだけだがw
>>416 Videoinput Library は現在のWindows版OpenCVでは
そもそも標準採用なので
わざわざ別のをリンクしないように注意
>>417 Videoinput LibraryってOpenCV上からだと使えない関数があったような。
デバイス名取得とかってOpenCVでも出来たっけ?
>>418 純粋にOpenCV上からではVideoinput Library が仮想関数の向こうに隠されているので出来ません
こっそりとヘッダは入っているので、私はincludeしてWindows機種依存の形で直接使いました
>>417 そうなんだ!
別のリンクして使ってたよー( ̄□ ̄;)
cvWaitKeyでキー入力を与えたいのですが、うまくいきません。
ターミナルから実行すると、端末の画面の方に文字が入力されてしまいます。
ウィンドウがそれを読み取ってくれないという感じです。
コンパイルエラーなどはなく、cvWaitKey(100)などとすると
ちゃんと100ms後に次に進むので、関数自体はきちんと動作しています。
考えられる原因は何でしょうか?
Mac OSX 10.5.8、Xcode 3.1.4、OpenCV 2.2
ここの1.画像表示のソースをビルドしています。
ttp://www.aianet.ne.jp/~asada/prog_doc/opencv/opencv_img_enh.htm 画像表示まではうまくいっています。OSX固有の問題なのでしょうか?
それ、ウィンドウじゃなくて端末画面の方をアクティブにしてる、ってだけじゃねーの…
>>422 どんなに画像のウィンドウをクリックしても、端末がアクティブのままになっているようです。
逆に、画像以外のウィンドウをクリックしても、画像のタイトルバーに色が付いたままです。
ウィンドウ作成関連で何かミスってるんですかね?
>>423 恐らくアプリケーションバンドルにしないとイベントを処理してくれないと思われる。
実行ファイル名がappnameだとして
appname.app/Contents/MacOS/
のようなフォルダ階層を用意して
そこにappnameを配置すればいけると思う。
>>424 ありがとうございます!
おそらく本来は、そのような配置にしたあとappname.appを実行するのだと思いますが
それでは起動できず(一瞬Dockが膨らんで終わる)、
MacOSの中に移したappnameの方を実行するときちんと動作しました。
あるいはそれで正しいのか、なんだか釈然としませんが
ひとまず先へ進めそうです。本当にありがとうございました。
Opencvで顔画像認識をするプログラムを組もうとしているのですが、
cvHaarDetectObjects()
cvReleaseHaarClassifierCascade()
の2つの関数でなぜかエラーが起きてしまいます。
エラー内容は以下の通りで
"_cvHaarDetectObjects", referenced from:
_main in 顔画像認識サンプル.o
"_cvReleaseHaarClassifierCascade", referenced from:
_main in 顔画像認識サンプル.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
プログラムは以下のサイトを参考にしました。
ttp://gihyo.jp/dev/feature/01/opencv/0003?page=3 環境はMacOSX(10.6.6) ・Opencv2.2・Xcodeを使っています。
Windows7・Opencv2.2・VS2010でこのサイトのプログラムをコピペしてビルドすると、上手く動作しました。
どなたか解決策をご存知ないでしょうか?
428 :
425:2011/03/31(木) 17:54:13.02
>>427 まさしくその通りでした。必要なライブラリファイルをリンクしていなかっただけのようです。ありがとうございました。
429 :
デフォルトの名無しさん:2011/04/02(土) 01:55:51.03
初めの設定の段階で、Visual Studioでコンパイルするとhighgui.dllが無いのでプログラムが開始できませんと出ます。
なので、.dllの入っているところを片っ端からpathに突っ込んでも出来ませんでした。
環境変数を変える以外になにかやることはあるのでしょうか。
環境はWindows7-64bit,OpenCV2.2,VisualStudio2010EEです。
>>429 VisualStudioだけ起動しなおせば大丈夫な気がする。
はやく画素アクセスが M(i,j,ch) みたいにできるようになってほしいのう
いちいち Mat_ にするのは面倒だ
433 :
429:2011/04/02(土) 23:17:43.19
>>430、
>>431 VisualStudioを起動しなおしたらできるようになりました。ありがとうございます。
434 :
429:2011/04/03(日) 02:21:10.81
連投&長文すいません。
内蔵しているカメラの映像をcvCaptureFromCAM関数で取得しようとしたのですが
映像を取得してくれません。このカメラはデバイスマネージャにはちゃんと
認識されていて、また、他の映像出力系のプログラムはデバイスマネージャには
見つかりませんでした。関数の因数も0,-1,200と試してみましたがどれも
失敗に終わりました。また、別のUSBカメラでもやってみたところ、同じく
映像が取得されませんでした。ちなみに、実行してるプログラムのソース
は参考書に載っているのを丸写ししただけなので間違いはないと思います。
この場合はまだ、OpenCVにカメラを認識させるなにかのプログラムが必要なのでしょうか
UVCのカメラの場合、スタンダードなサンプルそのままでは取得できなかった(
>>406)けど、
デバイスマネージャ上のイメージングデバイスは何と表示されてます?
内蔵カメラでUVCというのがあるのかどうかはわかりませんが、一応可能性のひとつとして。
436 :
435:2011/04/03(日) 04:46:42.43
あるいは、同じくダメだったという別のUSBカメラがUVCじゃなければ、
問題の切り分けとしてUVC云々が原因ではないといえそうですね。
437 :
429:2011/04/03(日) 13:31:16.74
438 :
429:2011/04/03(日) 13:34:06.76
連投すいません。
うろ覚えのUSBカメラは1.3-MP Webcam のC?00っぽいということです。
Rと組み合わせて使ってる人いませんか
どっかには居るんじゃね?
Rはググりにくいのが嫌だ
SとかCとかDとか
445 :
444:2011/04/15(金) 13:31:20.44
446 :
444:2011/04/15(金) 13:47:11.47
と、思ったら、これだと必ず外側の輪郭が必要なのね
CV_RETR_LISTで輪郭を全部抽出して、2値化してるし隣接する画素を参照して確認したほうが良いのか
個人的な独り言になってすまんかった
パーティクルフィルターってRが昔から自動でやってた処理に名前つけただけじゃん
最初のライブラリとかリンカとかから既に訳が分からないよ
初心者向けの日本語の資料ありませんか?環境は2.2+VisualC++2010で
最近は入門書とかもあるから、それを読め
iphoneで、リアルタイムに顔認識(顔の輪郭だけでいい)したいんだけど、
毎フレーム顔認識の機能を使うとリアルタイムでは出来そうにはないんだけど、
一回だけ認識してあとは、物体追跡でやったら、リアルタイムでできる
ものでしょうか、それとも他に方法ってあるんでしょうか?
よろしくおねがいします
452 :
デフォルトの名無しさん:2011/04/22(金) 21:02:18.51
画像のモーメントの空間モーメントはx,yの次数がそれぞれ1のとき何を表すんですか?
453 :
デフォルトの名無しさん:2011/04/24(日) 20:50:25.07
Huモーメント不変量は画像のどんな状態を表してますか?
454 :
デフォルトの名無しさん:2011/04/30(土) 03:06:41.11
OpenCVは製品検査用途として充分なライブラリはあるのでしょうか?
下に挙げた処理が使えれば素晴らしいです。
やっぱりおとなしくMILやHALCONを使えってことになるんでしょうか。
モルフォロジー処理 粒子解析処理 パターンマッチング処理
極座標変換処理 バーコード読み取り(できれば) OCR(できれば)
その他基本的な処理(エッジ抽出・2値化・プロファイル演算)
>>454 OpenCVのいくつかの技術は特許が取られているので、商用に利用する際は別途許諾を得るか、
特許が取られている機能を避け必要があるので気をつけてくだされ。
456 :
454:2011/04/30(土) 10:13:38.52
レスありがとうございます。
そこらへん、キチンとケアしないとだめですね。
457 :
デフォルトの名無しさん:2011/04/30(土) 11:56:28.76
OpenCVの画像処理ライブラリ群とImageJの画像処理機能は
どっちができることが多いでしょうか?
そんなこと聞いてどうすんの
459 :
デフォルトの名無しさん:2011/04/30(土) 12:36:54.14
ハァハァします
画像処理エンジニア検定とか有るけど、あれって取得して意味あるんかな
461 :
デフォルトの名無しさん:2011/05/19(木) 12:13:28.08
OpenCV2.1でつまづいてます><
環境はVista,Visual Studio2008Express Editionです。
OpenCV2.1をインストールして、
環境変数PathにC:OpenCV2.1\binを追加。
VisualStudioのツールでインクルード&ライブラリファイル追加。
プロジェクトのプロパティでリンカ→入力で必要なライブラリを追加。
しました。
試しに新たなプロジェクトでsampleのdft.cをコンパイルして実行すると
下記のようなエラーでうまく動作しません…
これは何が原因なのでしょうか?
スレッド 'Win32 スレッド' (0x16c4) はコード 0 (0x0) で終了しました。
スレッド 'Win32 スレッド' (0x1560) はコード -1 (0xffffffff) で終了しました。
プログラム '[5944] ファイル名.exe: ネイティブ' はコード -1 (0xffffffff) で終了しました。
>>461 ソース2秒も見たら終了コードが-1になるケースは限られてるのがわかると思うけど。
だ。
いまどき2.1?
今、最新versionいくつなの?
OpenCVの動画ってFPSはいくつまで対応していますか?
cvGetCapturePropertyのCV_CAP_PROP_FPSを使用していますが、
30fpsくらいなら正常に取得出来るのですが、180fpsになると0.08とか全然違う値になってしまいます。
よろしくお願いします。
180fpsの動画ちょ。ためしてみる。
でかいファイルのうpろだだと、どこがいいのかな?
470 :
466:2011/05/23(月) 12:42:09.99
>>466 0.0833...になるね。対応してないのかな?フレーム数900は確認できたけど、再生ソフトだと4秒になるよ?
aviファイルのopenに失敗してたりはしてない?
fpsの取得が失敗しても処理に影響することってあるんか?
可変じゃないなら事前に調べればいいだけだし
474 :
466:2011/05/23(月) 23:28:14.07
>>471 再生ソフトの秒表示が端数切捨てってことは無いでしょうか?
fpsはやっぱりおかしいですよね。
>>472 とりあえず、オープンそのものは失敗にはなっていないです。
>>473 fpsは解像度やシャッタースピード等で可変になるんで、fpsを取得する必要があるんです。
最悪、一度再生して再生時間を計測するとかしないといけないのかな。
>>466 Mac OpenCV 2.2.0 で試したところ150になったよ
画像自体は読めていたけどfpsはうまくいかないみたい
ffmpeg.exeだと、181.25 fpsで取てれますね。OpenCVのほうもffmpegで情報取ってるとおもってたけど違うのかな?
XP OpenCVは2.2 ffmpeg.exeは29958。
>>474 openCVのバージョンとオープンしてる関数はなんですか?cvCaptureFromAVI?
やってみたけどNULLを返すんだけどなぁ...
openCV1.1で追ってみるとCvCaptureAVI_VFW::open()のAVIStreamGetFrameOpenが失敗してるっぽいけど
ためしに&bmihをNULLに置き換えてみたら181.25を返した(windows7)
2.2はコンパイルする環境作ってないけどソース見た感じにおんなじような
478 :
466:2011/05/24(火) 10:44:17.20
C#でってことね。
openCVにしろOpenCvSharpにしろソースあるんだから、追っかけていけば謎は解けるんじゃないの
ffmpeg.exeで正確なfpsが取得できるなら、それでプログラム組めばいいじゃん。
481 :
466:2011/05/24(火) 17:37:51.13
482 :
466:2011/05/25(水) 17:57:52.25
自分用メモ
MediaPlayerを使って動画の時間を取得してみたけど、やっぱり30fpsを超えると取得出来なかった。
鬼門なのかな。
axWindowsMediaPlayer1.mediaCollection.add(axWindowsMediaPlayer1.URL);
double dblTime = axWindowsMediaPlayer1.Ctlcontrols.currentItem.duration;
自分用メモとか書きつつ
>なのかな。
とか、マジキモイw
484 :
466:2011/05/26(木) 10:48:46.04
キモくてすまんなw
キモついでに自分用メモ追加するw
cvSetCapturePropertyからCV_CAP_PROP_POS_FRAMESで最終フレームに移動して、
録画時間取得してフレーム数で割ったら簡単に出来た。
もういいから
今日の15時から17時にUSTREAMで
中部大の藤吉先生、広島大の栗田先生の講演中継あるよ
画像理解の道は修羅の道だ
488 :
デフォルトの名無しさん:2011/05/31(火) 20:58:56.84
HALCONやMILのライセンスって、幾らぐらいなんだろう?
489 :
デフォルトの名無しさん:2011/05/31(火) 22:57:55.33
画像の一部を局所的に拡大する画像変換の方法を
模索しています。
たとえば、顔の画像の目の部分や口の部分だけを自然な形で
拡大するようなシーンを想定しています。
OpenCVのAPIでこういった変換に耐えうるものは
ありますか?
自然な形ってのがあいまいすぎるわな。
変換に耐えうるってのも、主観的すぎてなんとも言えないわな。
>>489に便乗して
自然な形ってのをぬいた関数はあるんでしょうか?
それこそカメラの前にかざした手だけを拡大したり,目の部分だけを拡大したり
すみませんOpenCV2.2はVisual studio 2010で開発できます?
>>491 「形を認識する」「そう判断するに至った領域を判別する」「範囲内で指定領域のみを切り出す」「なんらかのアルゴリズムで拡大する」
はすべて別物として考えて下さい
1,3,4は単純な処理としてはOpenCVでの得意分野です
画像認識は、現在のものはアウトラインや特徴点などで判別している関係上、2のどれが内側かってのは難しいですね
>>489 つ 美人フィルタ
微分を使っているということなので、PDE関連の論文をあたったら?
形状抽出は2値化してから順番に番号振るけど、
内側と外側の判別はある程度の座標を決めて、その中でも結局近くの画素から判別するしか無いと思う
サンプルコードのカメラキャリブレーションで遊んでるんですけど、歪み補正された画像が表示されない、て言うか画面真っ暗なんだけど何でなの?
歪みねーな!
情報が少な過ぎるよ
なるほど、とりあえず1枚で、ってしたのが不味かったか
うほ
501 :
デフォルトの名無しさん:2011/06/02(木) 07:27:41.17
大学の卒業研究でopencvを使って何かやりたいのですがいいアイデアないでしょうか?
504 :
デフォルトの名無しさん:2011/06/02(木) 09:03:07.31
>>503 画像処理系のことで何かやりたい、と教授に言ってしまったからです
opencv使ってなんかやれと言われたので、とりあえずインスコしてサンプルは走らせたとこなんですが、やるネタが思いつかないんですよ
>>504 ネコの画像10000枚を学習させて写真の中のメコを検出するプログラム
>>504 教授室の前にWebカメラ設置して、訪問者が男なら鍵をかけ、女なら解錠し、さらに美人なら自動でドアを開けるプログラム
もしくは、教授室の前を通る人間を判別して、美人のみを撮影するプログラム
補正画像が出るようになったけど、画像の歪みが少ないから校正されてるのかわからん
>>504 道路を通過した自動車を認識して、交通量を測定する
この間ひさしぶりに交差点で手動でカウントしてる人を見て
こんなの自動化できるだろーって思った
仕事を作る仕事をしている人もいるのです
あーなるほど、映像がすでに補正されてるのか、意味ねーじゃん
研究でやるなら新しいことやれよ
512 :
504:2011/06/03(金) 00:06:59.57
こんなレスが付くとは・・・ありがとうございます
たしかに学習させてなにかを判別するっていうのは面白そうですね簡単にできそうですし
美人判定なら顔がいかに左右対称ってのと人の顔の平均に近いかってかんじですかね
交通量測定面白そうですね これにするかもしれないです
新しいことやりたいですけど案が思いつかなかったんで・・・
>>512 交通量を測定するなら、最低でも車種の選別と時間別の計測くらいは入れておけよ
論文書くなら、ナンバープレートをいかに遠くのカメラから正確に読み取るかで、新しい手法見つけりゃ特許まで取れるかもしれん
まー大抵の鮮鋭化手法は確立されてるから、かなり厳しいが
リアルタイムで遠距離や画像ボケによる失われた情報を復元するくらいのこと出来れば、教授から褒めて貰えるぞ
>>512 研究と開発を分けてかんがえろよ
研究しろ
トラックの向こう側に隠れて通過する車とかどうすんだよ。
カメラふやせば?
517 :
504:2011/06/04(土) 09:51:22.48
たしかに開発ライクになってしまいますね・・・うまくやります
交通量測定ならたしかに車種の判定とナンバープレートとかはできそうですね
レスしてくれた方色々参考になりましたありがとうございました
トラックに隠れる車は交通量だけならカメラ複数or上方からの撮影でいけそうですね
隠れる車のナンバープレート判定なら難しそうですがこれは目視でもできないので仕方なさそうですね
頭使えよ
交通量測定の話からずれてる.ナンバープレートを認識,識別する作業は必要か?
安いフリーターやとって手軽にやってる交通量測定で上方カメラ設置できるのか?
サーベイもせずに2ちゃんでアイデアどうこうしようなんて研究向いてないよ
ナンバー発行地の識別とかはニーズがあるかも。
長期間の測定なら上方カメラ設置も出来るかも。
最初から難しいことをあれこれ考えるのはいいが、たいていポシャる。
出来ることを一つずつ積み重ねるのがよいよ。ま、考えるの自由だが。
Nシステムの悪口はよせ
俺を画像だけでも自動的にイケメンに変換する処理
ごめん
むり
>>523 画像だけイケメンになって何の得になるというのかね
いつになったらM(y,x,ch)みたいに画素アクセスできるようになるんだろ
書けばいいんじゃ?
ImageDataからポインタで指定しろよ
529 :
デフォルトの名無しさん:2011/06/08(水) 16:01:46.42
openCVでパノラマ画像を作る方法って
特徴点検出→特徴点対応→貼りつけだと思うが
ただ貼りつけるだけになってしまって、画像が重なって表示される
改善する方法ない??
東工の課題?
>>525 リアルタイムで処理出来れば、スカイプ程度なら人気者
533 :
デフォルトの名無しさん:2011/06/09(木) 11:54:05.02
>>530 課題ではないよ。
研究の基礎になるんだけど、そこができずに早速詰まってる。
顕微鏡とかの複数の画像からのマルチフォーカスを作成したいんだけど、アルゴリズムとか書いてある本とかないですか?
ホームページとか論文でもいいけど。
焦点 合成 アルゴリズム
とかでググると論文ぽいのも出てくるみたいだけど?
>>534 どこで見たか忘れたがミジンコの"全焦点"画像のデモには感動したな
失礼します。
輪郭を抽出して、その面積はcvContourAreaで求められるのですが、
輪郭の平均輝度を求める方法はありますでしょうか?
輪郭の画素位置は追えるんだからできるだろ
すいません、輪郭の「範囲内」です。
輪郭抽出したらその中をスキャンすればいいだけだろ。
面倒だけど、難しくもない。
cvLineで点線って引けないよね?
頭使えよ破線はどうやってできてるんだ?
>>542 だいたい分かるけど・・・
凸包できますかね?
>>544 543ですが、日本語がちょっとおかしかったです。
凸包を点線で描写したいんですが、できますか?
画像を左上の画素から右下の画素まで読んで各色の数を数えたいのですが、
どうすれば1画素ずつスキャンできますか?
画像認識の知識がなく、どこで聞いたらよいかわかんないんで失礼します。
カメラの画像等で、背景が黒系で、白塗りの円を数十個マークしてある状態で、
このマークの数をカウントするアルゴリズム考えています。
工場のラインで、マーキングしてあるモノを数えるイメージ?
私としては、マークは定型なので、円を検出してカウントしようかなと考えているのですが、
その手法としてハフ変換というものを用いるらしいんですが、結構処理が大変っぽいらしいので
たぶんそんなに厳密にやらなくても円を検出してくれると思うんですが、処理速度が速くて、
良い方法ありませんか。
なるべく処理速度が速いアルゴリズムにしたいです。
単純なカウントならラベリング又はblobを使うといいよ
cvFindContours
で、良いんじゃね?
Error: オーバーロードされた関数"cv::BruteForceMatcher<Distance> :: match[代入Distance=cv::L2<float>]"のインスタンスが引数リストと一致しません
error C2664: 'void cv::DescriptorMatcher::match(const cv::Mat &,std::vector<_Ty> &,const std::vector<cv::Mat> &)' : 2 番目の引数を 'std::vector<_Ty>' から 'std::vector<_Ty> &' に変換できません。
個人のブログみたいだしコメント欄で聞けば?
コメント欄で聞いてみることにしました
以前は、動いていたプログラムが、正常に実行できたり、できなかったりします。
TCP/IP プロトコルで送られてきた、エレコムのUSBカメラで撮影したデータなのですが
cvShowImage関数を使って表示しようとすると、
「opencvClient.exe の 0x1007356e (cxcore200d.dll) でハンドルされていない例外が発生しました: ・・・・」
デバッグでステップインすると
cxcopy.cpp のstatic void flipVert( const Mat& srcmat, Mat& dstmat )関数の部分で
int t1 = ((int*)(src1 + i))[0];
src1 が空です。src1 は符号無しのchar 型のポインタ変数で
const uchar* src1 = src + (size.height - 1)*srcstep; このように定義されています。
const uchar* src = srcmat.data;
関連するsrc 変数はsrcmatという構造体のdataを指しています、ゆえに
この部分でsrc1 の値が入っていないので、アクセスバイオレーションが発生しています。
カメラが壊れて、データが壊れているのでしょうか?
環境 Openv2.0 & VS10
エレコムに聞け
知恵袋最強
558 :
555:2011/06/19(日) 01:10:15.60
ざっと見、203400とかイメージデータサイズが埋め込まれてるから、カメラが320x240じゃないと落ちそうだけどな
通信部分全部取っ払って、カメラのデータをそのまま表示してみりゃカメラが壊れてるかどうかなんてわかるんだろ
画像が正常に取得出来てるかとか、
静止画を突っ込んで見るとか
src1の元にデータは入っているのかとか
見ればわかりそうだけどもな
関数のアルゴリズムが知りたいです。
FPGA化するかもしれないので。
ソース見れ
Windows 7
Visual Studio pro 2010
OpenCV2.0
マルチスレッド (/MT)
このような環境で、リリースビルドでコンパイルしてできた実行ファイルを、配布したいのですが
OpenCV2.0のDLL の入っていない環境で実行すると当然
「highgui200.dllが見つからなかったため、このアプリケーションは開始できませんでした。」
エラーが出ます。
コンパイルオプションや、ビルドスイッチの設定で回避する方法があれば教えていただきたいのですが。
どゆこと?
>>565 >>563です
ありがとうございます、紹介して頂いたサイトを見て、自分の環境でも行えるように
して見たいと思いましたが、簡単にできそうもないので、DLLも一緒に配布したいと
思います。
>>566 です
休みなので、スタティックリンクライブラリ化にチャレンジしてみるのですが
ライブラリイの出力先を、何処で指定するのでしょうか?
紹介して頂いた、サイトでは普通に、以下のような感じで、設定し、ビルドすると
[アクティブ ソリューション構成] ドロップダウンリストから、 「<新規作成...>」を選択しますと、[新しいソリューション構成] というダイアログが
表示されますので、[名前] に Release_Static と入力し、[設定のコピー元] から Release を選択します。
[新しいプロジェクト構成を作成する] チェックボクスはオンにします。これで [OK] ボタンを押します。
cv.lib C:\OpenCV\_make\release_static\
このように、出来上がっているようなのですが、自分の環境では上手く行きません?
現在の環境は
VC8
OpenCV2.0
です。
>>567 です
構成プロパティ→C/C++→全般→出力ディレクトリでできました
自己完結オメ
何かの時は参考にさせてもらうのぜ
570 :
デフォルトの名無しさん:2011/06/26(日) 23:11:56.73
VCとOpenCVを最近さわりはじめた初心者で、詳しいことが分からなかったので
ここで質問させていただきます
パーティクルフィルタを実装しようとして、cvConDensation構造体を用いたプログラムをコンパイルしたところ
「'cvConDensation' : 定義されていない識別子です。」というエラーが出てしまうのですが、
OpenCV2.2にはcvConDensationは定義されていないのでしょうか?
環境は
Windows7
Visual C++ 2010 Express
OpenCV2.2
です
ご存じの方、よろしくお願いします
インクルードファイル合ってる?
>>571 ありがとうございます
opencv.hppをインクルードすれば、すべてのヘッダファイルが読み込まれるものだと
思っていたのですが、他にも読み込むファイルが必要なのでしょうか?
いい加減画像格納のフォーマットは固めて欲しいもんだ
え、変わったん?
いや?
openCV 2.0 に同梱されている、ffmpeg のライブラリの使い方が解説してあるサイトをご存知でしたら
教えてもらえませんか。また、ffmpeg のライブラリでカメラから撮影したデータをavi とかflv にエンコーディングは
できないでしょうか?
>>577 根本から間違いすぎてる
OpenCVは何を使って動画を読んだか書いたかとか気にしないでいいように存在してる
古いやつには不具合はあれどそもそも標準で読み書きに対応してんだからそのままやればいい
他の手段を捨ててなぜかffmpegにこだわっての使い方限定なら多分スレ違い
そもそも何故2.0限定なんだろう
>>578 自分の書いた文章を書き込んでから読み直したらひどかった、正直すまんかった
標準のcvCaptureうにゅうにゅは環境で勝手に読み込み方法を切り替えちゃうね
OpenCVって「話題だし便利そうだから使ってみよう」と思って使ってみるんだけど
なんかどうでもいいところでハマってしまって「無駄に迂回してるだけなんじゃ」
と思ってしまうんだよね。なんというかできそうでできないことが多い。
できそうでできないことね。例えば?
OpenCV 2.3 and mac OSXな環境ですが、cv::VideoWriterがうまく動作しません。
cv::VideoWriter writer;
IplImage *query = NULL;
CvCapture *capo = cvCaptureFromAVI("newpart3.avi");
writer.open("outpart2.avi", CV_FOURCC('M','P','G','4'),29.97, cv::Size(720, 480));
while((query = cvQueryFrame(capo)) != NULL)
{
writer << query;
}
ソースはこんな感じで、outpart2.aviにはヘッダ情報のみしかない雰囲気です。
どなたかエスパーできる方いらっしゃいませんか?
>>582 fourccを "avc1", "png " に変えて試してみろ
>>583 うまくいきました!!ありがとうございますm(_ _)m
MFCアプリでvideoInputを直に使っています.
showSettingsWindow()で設定ダイアログが出せるのですが
videoInputでは
・設定ダイアログを現在出しているかを判断
・設定ダイアログダイアログを閉じる
方法が提供されていません.
これらを行う良い方法はありませんか?
つ[ findWindow() ]
OpenCV初心者です。
パノラマ画像の生成について調べてたんですが、SURFは特許が絡んでるとの事。
代替の特徴量抽出で使えそうなものって何かありますか?
goodfeaturetotrack
OpenCV2.1のcvCalibrateCamera2()で計算された
カメラ行列Aと歪係数Dを用いて,
(1)校正に用いたチェスボードを撮影したカメラ画像をcvUndistort2()した画像に,
(2)(1)の画像のチェスコーナー点座標をcvUndistortPoints()した座標を
重畳描画してみたところ,位置が重ならずに困っています.
(1)を
cvUndistort2( 元画像, 結果画像, カメラ行列A, 歪係数D );
(2)を
cvUndistortPoits( 元点座標, 結果座標, カメラ行列,A 歪係数D, NULL, カメラ行列A );
としていますが,引数指定が間違っているのでしょうか?
590 :
589:2011/07/28(木) 12:32:14.95
cvUndistort2()とcvUndistortPoints()とでは
必要となる計算の方向が逆だから同じコードで計算はされていないはずだ
→重ならない理由はそこらにあるのか?
→歪モデル式から逆計算せねばならないcvUndistortPoints()はちゃんとやっているのか?
…とか考えてcvUndistortPoints()のソース覗いてみたのですが
// compensate distortion iteratively
という個所で forで5回だけ回る謎のコードが書いてある…
この部分がドキュメントでの「 approximate iterative algorithm」に当たるのだと思うのですが
なんでこれで計算できるのかがさっぱりわかりません.
この個所の意味がわかる方いらっしゃいませんでしょうか…
>>526 それC++でできるよ
というかなんでみんなC++使わんの?
なんで皆がc++使ってないと分かるの?
みんな=All the people
皆(みな)=A lot of people
みんな元気? と聞かれて いぇーい! と答える口?
なんでみんな元気って分かるんだろうね。
いや、皆=everyoneだろJK
みんなラッパー使ってC#で書いてるよ
OpenCVSharp使ったせいで、ひさびさにIplImageとか使ったわ。
死ね
598 :
デフォルトの名無しさん:2011/08/26(金) 17:47:46.08
復帰?
599 :
デフォルトの名無しさん:2011/08/30(火) 00:30:43.32
てst
windows7 64bitのOSでVisual Studio 2010を使って最近OpenCVを使い始めたのですが、
ver2.3を用いた時になぜかビルドできなかったので、ver2.2を用いてしばらく使っていました。
ですが、webカメラを用いて画像(動画)を取得する動作をさせるプログラムを作った際に、グレーの画面しか出てこず、
うまくいかなかったので、調べた結果windows7 64bitモデルでver2.2を用いた場合はこのような症状が多発しているとのことで、
ver2.0を用いればうまくいくとの事だったのでて新たにver2.0でやり直そうとしたところCMakeを用いてソリューションをビルドしなくてはならないとのことだったので
(今まではCMakeを用いてなかったのですが)今回初めてCMakeを用いて設定したのですが、ソリューションをビルドしたときに作成されるはずのファイルのうち
重要なcv200.libだったり、highgui200.libだと言ったファイルが作成されないのですが、どうしたらよいのでしょうか?
>>600 lib\Releaseやbin\Releaseあると思うけど
ビルドは成功しているんだよね?
どういったファイルが生成されたのかログを見たら
Windows7 64bitOSとVS2010でOpenCV2.3.1を使おうとしているのですが、導入で躓いてしまいました
ネットから拾ってきたDxLibとの併用のサンプルプログラムを実行しようとしているのですが、
OpenCVのCvCaptureなどの構造体、及び関数がVS2010に認識されません。
VS側の追加のインクルードディレクトリに登録するのは、opencv\build\include\opencv2及び\opencv、
環境変数のPathに追加するのは、opencv\build\x64\build\vc10\bin。
これらで合っているでしょうか?
opencv使ったことないから当てずっぽうでいうけど、
VSの追加のライブラリディレクトリか環境変数libに
opencv\build\x64\build\vc10\lib辺りを追加して
追加の依存ファイルにライブラリ名追加するのを忘れてんじゃないの?
もうコンパイル済み使っちゃえよ
ここがC言語初心者スレだ
>>604 プロジェクトのプロパティ、リンカーの追加のライブラリディレクトリにopencv\build\x64\build\vc10\libを追加することでとりあえず赤線は消えました。
仰るとおりでした、ありがとうございます。
しかしコンパイル時にcvReleaseCapture等が未解決の外部シンボルのエラーになってしまいました。
これはまだ追加のライブラリや追加のインクルードに必要なフォルダが登録されていないということでいいんでしょうか?
パス通してinclude忘れてるとかそんなオチだろ
コンパイルエラーならインクルード、リンクエラーならライブラリ、どっちのエラーか
リンクならライブラリを指定してないんじゃないの。
610 :
607:2011/09/05(月) 18:41:14.43
確認してみましたが、リンカーについては追加の依存ファイルの設定も追加のライブラリディレクトリも設定してありました。
導入手順を確認したいのですが、これ以上は初心者スレに行ったほうがいいでしょうか?
>>610 リンクエラー(未解決の外部シンボルのエラー)になるということは、
プログラム内にも追加の依存ファイルの中にもその関数の実体がないということ。
cvReleaseCaptureならopencv_highgui2*.libだと思うけど、入ってる?
612 :
610:2011/09/06(火) 21:11:33.69
>>611 確認してみましたが、opencv_highgui231.libは追加の依存ファイルに
登録されていました
OpenCV 2.3.0 の vc10\lib から検索してみたけど、cvReleaseCapture は opencv_highgui*.lib に入ってたよ。
C:> "%VS100COMNTOOLS%\\vsvars32.bat"
C:> for %f in (*.lib) do @(dumpbin /EXPORTS %f | findstr cvReleaseCapture && echo %f)
_cvReleaseCapture
opencv_highgui230.lib
_cvReleaseCapture
opencv_highgui230d.lib
OpenCV2.3でOpenCV1.0のプログラム動かしたいんだけどエラーがめっちゃでるのね。これって1.0のプログラムをそのままコピペしたら動かないようになってるの?
そもそもコマンド名から代わってるからな
一つずつ調べて書き直せ
ありがとうございます!
Cライブラリはあまり変わってないと思うけどな。
highguiあたりで引数が増えたりがあったけど。
>>614 _c.hの方をincludeすると幸せになれる
bmpをロードしてcvShowImageで表示しようとしたら、12秒くらいかかって真っ白なウィンドウしか表示しない。
スレッド上ではうまく動かないとかあるんでしょうか?
しらんがな!とか言いようが無い。
ここは質問よろしいですか?
格子状に縦と横の線が垂直に交わっていて、その交点を抽出したいのですがうまくできなくアドバイスが欲しいのです。
関数 cvGoodFeaturesToTrack() を使ってコーナーとして検出できるのかなと思ったのですが、背景が暗い白、格子線が背景より少し明るい白のためか、誤検出が多いのです。
恐縮ですが知恵、知識を拝借願えないでしょうか。
どう誤検出なのかぐらいは書きましょう。二値化なりすれば?
誤検出は交点をとらず、ゴミや照明の角度による影、線の中腹(線上の交わっていない部分)などを検出していると思います。二値化ですか、やってみます。背景と格子線が似た色なので閾値が決められず保留にしていました。
624 :
619:2011/09/14(水) 12:12:25.55
bmp自体のロードは成功していて、別スレッドでOpenGLを使っていたのが拙かったのかもしれないです
OpenGLのウィンドウへコピーしたら表示されました
すみません、質問させてください。
Visual C++ 2010 ExpressとOpenCV 2.3.1を合わせて導入したのですが、
(OpenCVはコンパイル済みのOpenCV-2.3.1-win-superpackを使用)
Debugでビルドした実行ファイルは正常に動作するのですが、
Releaseでビルドした実行ファイルがすべてクラッシュしてしまいます。
正常に実行出来るようにするには、どういった点をチェックすればよろしいでしょうか。
連投になってしまい申し訳有りません。少し実験して状況を確かめてみました。
Visual C++ 2010の[リンカー] - [入力]設定欄で
末尾にdがつくlibファイルを先に入力するとDebugは正常に動くがReleaseは動かず、
末尾にdがつかないlibファイルを先に入力するとReleaseは正常に動くがDebugは動かないようでした。
両立させるにはどのように設定すればよろしいのでしょうか?
うぜえんだよカス
dがつくlibをreleaseモードで入力してんの?馬鹿なの?死ぬの?
>>628 プロジェクトのプロパティ→構成
Debugの方をdつく方にして
Releaseはつかない方セットする
ああ、そんなことか
dってのはデバッグのdなんだよ
両立させることは不可能。なぜかたまにうまくいくこともある。
635 :
デフォルトの名無しさん:2011/09/16(金) 08:59:39.98
Haar-likeで顔を抽出しROIをつかってウィンドウに抽出した顔の矩形部分を表示したいのですがなぜか定義したはずのCvRect rが
定義され ていないとエラーが出てしまいます。
どうやったらroiにrからの値を代入できるでしょうか?
ちなみに[breakpiont]ではrがありえない数字もしくはエラーになってしまいます。
ご教授の程よろしくお願いします。
以下部分的なソースコードです。
636 :
デフォルトの名無しさん:2011/09/16(金) 09:03:18.91
CvRect roi;
CvRect *r;
省略
for(int i=0; i < (objects ? objects->total : 0); i++){
r = (CvRect *) cvGetSeqElem(objects, i);
if(r != NULL) roi = cvRect(r->x, r->y, r->width, r->height);
cvRectangle(frame, cvPoint(r->x, r->y), cvPoint(r->x + r->width, r->y+r->height), CV_RGB(0, 255, 0), 4);
}
roi = cvRect(r->x, r->y, r->width, r->height);
cvSetImageROI(frame,roi); //[breakpoint]
cvShowImage("顔検出",frame);
cvResetImageROI(frame);
>>636 顔がひとつも検出されないときに
ループに入らないからrが未定義なのでは
638 :
デフォルトの名無しさん:2011/09/16(金) 12:21:04.76
>>637 アドバイスありがとうございます。
おかげさまで解決しました。
一応解決方法として
roi = cvRect(0, 0, frame->width, frame->height);
と最初に定義することで解決しました。
639 :
デフォルトの名無しさん:2011/09/16(金) 12:26:13.44
haar-likeのカスケード分類器を複数使って顔の部位を複数検出する
プログラム作ってるのですが、プログラムを10秒くらい起動し
ているとメモリの不正アクセスとかで落ちます。
なにか良い改善方法はありませんでしょうか?
一回一回cvReleaseMemStorageでメモリを解放すればいいんじゃないかな
641 :
デフォルトの名無しさん:2011/09/16(金) 22:41:57.11
>>640 アドバイスありがとうございます。
言われた通りに1回1回メモリ開放すればずいぶん長く起動できる
ようになりました。
ところで、カメラが家に2つあるので両方ためしたのですが
1つは正常に動作
もう1つはメモリの不正アクセスでエラー
となるのですが、カメラによってプログラムの動作もやっぱり
大きく変わってくるのでしょうか?
たとえばカメラが対応していない解像度を指定しちゃってるとか
cvSetCapturePropertyでカメラの縦横解像度を指定できる
643 :
デフォルトの名無しさん:2011/09/17(土) 09:55:53.09
>>642 対応してない解像度を指定しているとは盲点でした。
アドバイスありがとうございます。
ですが解像度はどうやら関係ないようでした。
FPSも関係ないようです。
ドライバの問題でしょうか?
ちなみにエラーするカメラは「ps3Eye」でドライバは有志のかたがたが
作られたものです。
645 :
デフォルトの名無しさん:2011/09/17(土) 16:16:18.53
>>645 だとすると何とも・・・
まあOpenCVのキャプチャコードは大してまともじゃないということと、
フリーのドライバだけに完璧じゃないということもあるし。
解決可能かどうかはともかくだけど、プログラム的には、どういう条件で起きるか、
例外がどこスレッドで、どこのメモリで、どういうスタック状態で起きているのかを精査するのは無駄ではないはず。
画像キャプチャ部分だけ他のライブラリ使う手もある。
>>646 画像を表示させたりとか基本的なところは実行出来てるんだよね?
>>648 USBカメラを選択したあとでエラーがでます。
少し調べたところ
1フレームキャプチャし,キャプチャサイズを取得する.
のあたりが問題なようですがよくわからなくて困っています。
650 :
デフォルトの名無しさん:2011/09/18(日) 00:22:28.40
>>647 なるほど、確かに精査することで得るものもありそうですね。
ちょっと調べてみます。
お付き合いいただきありがとうございました。
まともなプログラムが書けてないのが問題だったでござるの巻
652 :
デフォルトの名無しさん:2011/10/04(火) 17:31:22.62
ver1.1のcvSVDについてなのですが
int main (int argc, char **argv) {
CvMat *W = cvCreateMat (6, 3, CV_64FC1);
CvMat *U = cvCreateMat (W->height, W->width, CV_64FC1);
CvMat *sigma = cvCreateMat (W->width, W->width, CV_64FC1);
CvMat *V = cvCreateMat (W->width, W->width, CV_64FC1);
int i, j;
for (i = 0; i < W->height; i++) {
for (j = 0; j < W->width; j++)
cvSetReal2D (W, i, j, i*j);
}
cvSVD (W, sigma, U, V, CV_SVD_V_T);
return 0;
}
としたらうまく動作しますが、
653 :
デフォルトの名無しさん:2011/10/04(火) 17:33:57.25
void factorization (CvMat *W, int frame_count, int final_count) {
CvMat *U = cvCreateMat (W->height, W->width, CV_64FC1);
CvMat *sigma = cvCreateMat (W->width, W->width, CV_64FC1);
CvMat *V = cvCreateMat (W->width, W->width, CV_64FC1);
cvSVD (W, sigma, U, V, CV_SVD_V_T);
のように関数にCV_64FC1型の行列Wを関数の引数とした場合
Sizes of input arguments do not match (U matrix has unappropriate size)
in function cvSVD,. \cxsvd.cpp(1334)
となりうまくいきません。
分かる方いらっしゃいますか?
>>653 上のでもWをcvCreateMat (3, 6, CV_64FC1); にしたら通らないのでは
引数の行列のサイズが違うといわれているけど
655 :
652:2011/10/04(火) 21:39:27.16
よくわかりませんが横長の行列の時に上手くいかないみたいなので
Wを転置行列にしてからSVDを行うことによって解決しました。
654さんありがとうございました。
opencv2.3.0をCMakeを用いてインストールして、Visual Studio2010を用いてプログラムを書いてるのですが、エラーのせいで全然実行できません。
このサイト→(
http://ameblo.jp/8810-008/entry-10976608820.html)を参照してインストールしたので、一応プロパティシートも変更したりしました。
以下にソースコードと、エラー内容を載せるのでどこを変更したらいいかご教授ください。
おそらくソースコード自体はO'RIELYの『詳解OpenCV』を元に書いてるのでとくに問題はないと思います。
実際に、OpenCVの別のバージョン(1.0、2.2)では問題なく実行できていました。
ただ、ver1.0や2.2(どちらもインストーラーファイルにてインストール)ではWindows7の64bitで使用した際に、webカメラを指定すると
一瞬で終了したり、真っ黒な画面が表示されたり、そもそもwebカメラが見つからないと言ったエラーが出てくるので、バージョンを変更しました。
2.0ではそれらの問題がないとのことでCMakeをもちいてインストールしたのですが、ソリューションのビルドをしたところ、highgui.libなどいくつかのlibファイルが
生成されないと言ったエラーが起こってしまい、結局できませんでした。
もし、最初の質問に加えて、これらの問題の解決策についても、ご存じの方がいらっしゃいましたらご教授お願いします。
(ちなみに、ver2.0は右記サイトを参照してインストールしました。→
http://imagingsolution.blog107.fc2.com/blog-entry-149.html)
使用PC
OS:Windows7 (64bit)
#include"stdafx.h"
#include "highgui.h"
#include"cv.h"
#include"opencv2\\opencv.hpp"
#pragma comment(lib,"D:\\OpenCV2.3.0\\build\\lib\\Debug\\opencv_core230d.lib") // opencv_core
#pragma comment(lib,"D:\\OpenCV2.3.0\\build\\lib\\Debug\\opencv_imgproc230d.lib") // opencv_imgproc
#pragma comment(lib,"D:\\OpenCV2.3.0\\build\\lib\\Debug\\opencv_highgui230d.lib") // opencv_highgui
#pragma comment(lib,"D:\\OpenCV2.3.0\\build\\lib\\Debug\\opencv_objdetect230d.lib") // opencv_objdetect
int main( int argc, char** argv )
{IplImage* img = cvLoadImage( "D:\\OpenCV2.2\\Chrysanthemum.jpg" );
cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE );
cvShowImage("Example1", img );
cvWaitKey(0);
cvReleaseImage( &img );
cvDestroyWindow("Example1");}
エラー内容↓
D:\OpenCV2.3.0\include\opencv\highgui.h(45): fatal error C1083: include ファイルを開けません。'opencv2/core/core_c.h': No such file or directory
658 :
デフォルトの名無しさん:2011/10/05(水) 20:24:06.16
>>657 C言語ならcxcore.hじゃないの
エラーはD:\OpenCV2.3.0\include\opencv2\core\core_c.hが存在するなら
D:\OpenCV2.3.0\includeにインクルードのパスが通ってないと思うけど
そのサイトはファイルを直接編集しろとか言ってるけど
普通はツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリで設定する
オープンCVをアンドロイドで使いたいんですが本気の初心者にもわかるような
ホムペはありませんか?
無ければわかるようになるまで学ぶ方法(ネット、本でもおk)を教えてください。
とりあえずAndroidという事はおいといて、
やりたい事がPCで普通に出来るところまで勉強すれば。
>>660 visual studioとか買った方がいいんでしょうか?
Androidで動くようになるまで5年くらいかかりそうやね?w
とりあえずVSは無料版でOK
>>658 返信ありがとうございます。
一応cxcore.hをもちいたり、highgui.hの方に変更したり、プリコンパイル済みヘッダーの使用(プロジェクトのプロパティより設定)を、使用(/Yu)から作成(/Yc)に切り替えたりと、
色々やってみたのですが、やはり前二者に関しては同じエラーが、後者に関しては、別のエラーが出てしまい解決に至らなかったのでおっしゃる通りパスの設定やcore_c.hの有無等を確認したところ
パスは、環境変数の設定で追加してあるのに加えて、VC++ディレクトリのインクルードの方にも追加したのですが、うまくいきませんでした。
そこで、core_c.hの方を探してみると、なぜか生成されておらず、恐らくこれが原因かと思われたので、同じバージョンのコンパイル済みファイル(OpenCV-2.3.0-win-superpack.exe)内の...\OpenCV2.3\build\include\opencv2にあったファイルを持ってきて
もう一度ビルドするとビルド自体はうまく行きました。
そこで、今度はデバッグしようとすると「opencv_core230.dllがないため、プログラムを開始できません。・・・・」といったシステムエラーメッセージが出てきてしまいました。
しかし、opencv_core230.dllを探したところ、ちゃんと存在しておりました。
このエラーはなぜおこるのでしょうか?
すみません上の書き込みをしたものですが、文章が変ですね。
エラーの解決策をご教授いただけますでしょうか?
>>662 ありがとうございます。
無料版もあるんですか。
やってみます。
すみません、opencvをやるに当たってC++とかも学んだ方がいいのでしょうか?
当然
まあCでも十分といえば十分だが
C++の知識があった方が圧倒的に楽だな
>>666 10年間C++をしっかり勉強してからOpenCVに手を出すのがいいと思う
ラッパー使うならC#も有り
でもやっぱりソースコードが読めるくらいの知識は必要だったり
>>663 環境が複雑になってそうだけど
ファイルがないのではなく、別のバージョンのヘッダーを読んでいるってことはないかな
インクルードディレクトリに複数のバージョンのOpenCVのincludeディレクトリが入ってるとか
dllのエラーはVC++ディレクトリの実行可能ディレクトリにdllがあるディレクトリを追加するか
dllがあるディレクトリを環境変数PATHに追加すればいいと思う
前者の場合、VC上から実行したとき以外はエラーになるだろうからPATHに入れるのがいいと思う
質問させて下さい
環境:Android2.3.3 OpenCV2.3.1
Matで読み込んだ画像をcvFindStereoCorrespondenceGC関数の引数に使いたいんですが、うまくいきません
Mat* image_left = (Mat*)addr_left; // jlong -> mat
Mat* image_right = (Mat*)addr_right;
CvSize size = cvGetSize(image_left);
CvMat* disparity_left = cvCreateMat( size.height, size.width, CV_16S );
CvMat* disparity_right = cvCreateMat( size.height, size.width, CV_16S );
CvStereoGCState* state = cvCreateStereoGCState( 16, 2 );
cvFindStereoCorrespondenceGC(image_left, image_right, disparity_left, disparity_right, state, 0 );
cvReleaseStereoGCState( &state );
CvMat* disparity_left_visual = cvCreateMat( size.height, size.width, CV_8U );
cvConvertScale(disparity_left, disparity_left_visual, -16 );
Matは引数に使えないんでしょうか?適切な型がわかりません
どなたか教えていただけないでしょうか
673 :
デフォルトの名無しさん:2011/10/09(日) 12:53:28.06
質問です。
Opencvのカスケード分類器を用いて顔の認識を行っています。
検出される各領域に付けられる、それぞれのスコア(検出度)を出力したいのですが、
どこを参照すればいいですか?
唐突な質問で申し訳ないですが、宜しくお願いします。
>>673 分類器を全て通過したかしなかったかの2値だと思う
>>673 cvhaar.cppのcvRunHaarClassifierCascadeのstage_sumでも返したらいいんじゃね?
676 :
デフォルトの名無しさん:2011/10/16(日) 21:18:46.11
OpenCV 2.2 で mac OSXですが、VideoWriterがうまく動作しません。
ソースは以下のような感じです.
VideoWriter VideoWriter("out.avi",CV_FOURCC('D','I','B',' '), 30, Size(Width,Height));
while(true){
Mat img;
//ここでimgをロード(省略)
VideoWriter.write(img);
}
情報が少なくて申し訳ないですがよろしくお願いします.
>>676 まずはどう動作しないのか、どういうエラーが出るのかくらい書こうぜ
opencvのインストール時にエラーが出て先に進まなくなってしまったので質問指せてください。
当方vmwareを使用してatde2(linux)環境でopencv2.0をインストールしようとしています。
opencvのmakeまではうまくいくのですがmake installを行おうとしたところ以下のようにエラーが出てしまい、うまくいきません。
[100%] Built target traincascade
Install the project...
-- Install configuration: "RELEASE"
-- Installing: /home/atmark/opencv/release/share/opencv/OpenCVConfig.cmake
.
.
-- Installing: /home/atmark/opencv/release/include/opencv/cvwimage.h
-- Installing: /home/atmark/opencv/release/include/opencv/cxflann.h
CMake Error at src/cv/cmake_install.cmake:48 (FILE):
file INSTALL cannot find "/home/atmark/opencv/release/lib/libcv.so.2.0.0".
Call Stack (most recent call first):
src/cmake_install.cmake:38 (INCLUDE)
cmake_install.cmake:47 (INCLUDE)
make: *** [install] エラー 1
root@atde:/home/atmark/OpenCV-2.0.0/release#
原因がわからず困っています、必要であれば他の情報もお伝えしますので分かる方いらしたらよろしくおねがいします。
file INSTALL cannot find "/home/atmark/opencv/release/lib/libcv.so.2.0.0".
そもそもなぜ今頃2.0なのか
>679
普通にconfigure && makeからmake install行けたんだが(なぜか*.so.4.0.0とかなったけど)
cmakeでもpython切って通したが(こっちはちゃんと*.so.2.0.0)
とりあえず、
1. そのパッケージを取ってきたところ
2. cmake .した結果
が知りたい
やたら低いバージョンの質問してくる奴がたまにいるけど何なんだろな
なんかメリットあるんだろうか
683 :
406:2011/10/22(土) 17:53:48.16
ひさびさにOpenCVを触ってみたら2.3でUVCがサポートされていて俺歓喜w
格安Webカメラを並べてモーションキャプチャに車輪の再発明承知で挑戦・・・
ただマーカーとかキャリブレーションの小道具とかUSBの延長とかやってるとKinectの値段を超えそうな…
もちろん、UVCがサポートされていなかった2.2以前でもDirectShow経由でUVC使用可にするサンプルや情報を
公開してくださった
>>406のページのみなさんへの感謝は忘れない!これがなければ半年前に心が折れていた…
opencvをアンドロイドで使いたいです
どうやって勉強したらいいのか教えてください
もう2カ月くらい頑張りましたができる気配がありません
当方初心者です。
まず服を脱ぎます
どんな初心者用のホムペを見てもよくわからん言葉が出てきて詰みます
どこか初心者でもおkな情報源ありませんでしょうか?
本も堆く積みあげられてます。
ぐぐれ
>>688 ぐぐってダメだからここで聞いたんだっての
また時間置いてぐぐって挑戦してみるわ。
どんな本読んでるの?
日本語のOpenCV本って10冊もないでしょ?
全部読んでもわからないならあきらめたほうがいい。
よくOpenCV初心者っていうやつはそもそもC/C++初心者だよな
OpenCV以前の問題であることがほとんど
よくわからん言葉がどういうものか書けば、つまづいているレベルもわかるし
アドバイスもしやすくなる
まず10年間C++を勉強します
というか、アドバイスのしようがない。
プログラム暦というか、技量がわかるような記述が無いし。
何をしたいかも明確でない。ただの愚痴しか書いてないんじゃな。
>>693 さんくす
またやる気が復活したら相談にくるわ。
>>694 sine
>>695 まぁ、愚痴だから・・・
>>696 (2)−8
gcc、make、cmake、libidn、swig、subversionが必要ですので、リストから選択してください。
ここで詰んだ
cmakeはわかったんだが他の奴をどう選択すればいいのかさっぱりわからん。。。
ちなみにプログラム歴はいまやり始めたところ。
昔エクセルのマクロに挫折した。
>697
同じように選択すればいいと思うが
検索できるなら入力して見つければいいだろうし、Cygwinは知らんがGCCとかmakeはdevかなんかのグループにあるんじゃないかな
ひたすらリスト内から探してチェック付けてインストール
まぁ、Linuxなりなんなりでやった方が楽と思う
>>696 の前者がそのまますぎて詰まりようがない、こっちのがいいと思う
確か今のandroid SDKのえみゅってWindowsとLinux限定でWebカメラに対応したんだっけ?
だったら下手したら実機無しでもさくっと出来るね
>>697 >gcc、make、cmake、libidn、swig、subversionが必要ですので、リストから選択してください。
>ここで詰んだ
あーそれはLinux環境で10年間C++を勉強するしかない
まずバージョン管理しながらコードを書いて
きちんとしたビルドシステムが使えて
ジェネレーターを使って他スクリプト言語へのバインディングも作れるようになる
その過程で全てが分かるであろう
C++信者怖い
705 :
デフォルトの名無しさん:2011/10/28(金) 00:16:34.74
2.2でUSBカメラ(インストーラつき)で映像を取り込もうとしたのですが、
TVチューナーが優先的に認識されてしまいます。
認識するカメラを直接指定することは可能ですか?
(cvCaptureFromCAM(0) の引数を変更するだけでは駄目でした)
今気づいたけどcvCaptureFromCAMってcvCreateCameraCaptureを#defineしてるだけか。
自分の環境(2.3.1)ではcvCreateCameraCapture(int index)のindexで指定できてますね。
0指定だと別のカメラ(TVチューナ)が、1指定なら何も表示されないってパターンのときは、
一度Microsoft Expressionで当該カメラの画像を表示してやるとなぜかその後うまくいくことがしょっちゅうです。
Expression Encoderじゃなくてもいいですが、一般のUSBカメラを使うアプリ(ドライバ付属のもの以外で)で
使えるかどうかを…切り分け済みならすみません。
自分はWebカメラが安物のせいかよく繋ぎ直しで認識させてます。
あと幅高さを320x240にしてみるとかですかね。ただ幅高さは変な値を入れても
勝手にサポートしている近い値に修正される節があるので、原因とは考えにくいですが。
708 :
デフォルトの名無しさん:2011/10/28(金) 00:56:58.72
>>706 0指定=>TV
1指定=>コンソール上に『映像を取得できません』とポップアップで
『5-3.exe の 0x004122a3 でハンドルされていない例外が発生しました:
0xC0000005: 場所 0x00000020 を読み込み中にアクセス違反が発生しました』
というエラーが出ます。
Microsoft Expressionで当該カメラの画像を
表示してみた後でも同様でした。
開発環境はVisualStudio2010です。
709 :
デフォルトの名無しさん:2011/10/28(金) 01:06:21.04
>>707 先走って書いてすみませんでした
他のアプリでは動作確認済みです。
先程から助言ありがとうございます!
711 :
デフォルトの名無しさん:2011/10/28(金) 01:16:28.21
Windows版OpenCVでステータスバーやボタンなどQTを用いた機能を使いたいのですが、どうやればいいのですか?
QTを別途インストールが必要?
713 :
デフォルトの名無しさん:2011/10/28(金) 10:11:36.03
1. 入力画像を読み込む。
2. 入力画像の各ピクセルにアクセスして輝度値を得る。
3. 新たに作った出力画像の対応する位置に輝度値を描画する。
4. 出力画像を保存する。
おしまい。
openCVを使うまでも無いな
716 :
デフォルトの名無しさん:2011/10/28(金) 23:24:58.58
705です
デバイスマネージャでTVチューナーを無効化することで
USBカメラが優先認識されるようになりました(そらそうか)
>>712 どっちかというとQtベースでOpenCVを使うって感じじゃないのか
719 :
デフォルトの名無しさん:2011/10/30(日) 01:04:12.02
常にデスクトップを監視して
image.bmp(デスクトップの背景画像の一部をトリミングした画像)が含まれているかを
認識し、ウインドウなどが開かれてそのimage.bmpの部分が隠れてしまった場合を取得したいのですが
どのようにすればよろしいでしょうか?常にデスクトップを監視してimage.bmpと比較する方法がわかりません・・・。
開発環境 VC++2010
2乗誤差とかテンプレートマッチングはコスト高いから特徴量作れば楽かな
トリミングしたところの座標が分かればもっと楽だが
>>719 隠れた部分にはそもそも何も描かれていないのかも。
>>723 18歳以上の米国永住の人間が、はたしてこのスレにいるのか?
ジグソーパズルはNP完全問題だって聞いたことがあるな。
ジグソーパズルはピースの境目が手がかりになるけど、
シュレッダー文書は、運がよければ文字が切れるが
運が悪ければ文章か単語の境目で切れるから
文脈の判断まで必要か。おまけに全部同型の長方形。
イランのアメリカ大使館のシュレッダー文書を、
ペルシャ絨毯織る女性たちが復元したころは
シュレッダーも単に縦に紙を切るだけで、横には切らなかったんだよね。
データ見たけどかなり難しいと思うよ
キャリブレーションで使うチェスボードのいい作り方って何かありませんか?
キャリブレーションパラメータ取得と歪み補正やってみたら逆に魚眼レンズに近づいたワロタ
(1) 内部点のサイズが4x5
(2) 液晶モニタに表示させたチェスボードを撮影
(3) パラメータ取得に使った画像数は16枚(解像度は800x600)
(4) 1000円のUSBカメラを使用
と手を抜いている部分が多々あるので仕方ないのか。
公式ページのサンプルコードでは(1)は10x7、(3)は25枚なんだけど
(3)はどうにでもなるとして、(1)を10x7にするとなかなか認識してくれない…
モニタではなく紙に印刷したチェスボードを撮影すると、紙の凹凸のせいかやっぱり認識されにくい。
用紙の特定の箇所に黒インクが集中するから波打つんだよなぁ。レーザープリンタ使えってことか。
ちなみにcvFindChessboardCorners()のflagsはCV_CALIB_CB_ADAPTIVE_THRESH|CV_CALIB_CB_FILTER_QUADS。
実物でボード作りたいなら印刷屋に頼むのが手っ取り早いし
自分で紙に印刷するよりずっと信頼できるものができるよ.
モニタにパターン表示するのは(カメラ画像にフリッカーが写る場合があるのが難点だが)
特徴点が取れているならばそれでいいと思う.
校正精度が出ていないのは
多分,撮影の仕方の方に問題があるのではないかと予想.
全体的な特徴点分布を考慮して撮影するといい.
あと,安物のUSBカメラは
・触るとレンズvsセンサ面の位置がずれるものがある
→撮影画像間でずれてたら意味なし.
ずれてしまったら校正計算結果も無に帰す
・動体歪がすごい
→カメラを安置した状態で撮影すること.
手に持って撮影とかするとぐにゃぐにゃの絵が撮れてしまう
といったことに気をつけないとですよ.
経験的にcvFindChessboardCornersは明暗にそんなに強くないっぽいので
うまく点が取れない場合,前処理として自分で2値化した画像を渡したほうがうまくいく感じ.
729 :
727:2011/11/01(火) 21:07:02.56
>>728 うおおおアドバイスてんこ盛りでありがとうございます!
印刷屋さんにお願いするのは費用的に最後の手段にしたいですね…。
でも時は金なりと考えるとアリかもしれませんね。
触ってレンズ・センサがずれるなんてことがあるとは…可能性が十分ありそうな価格でしたが
対策が思い浮かばないのでとりあえず、大事に扱う・祈る、を実践します。
そしておっしゃるとおり手でカメラを持って上下左右にかざしていたので、
動体歪みがすごいことになっているということだと思います。
(なるほど…すばやくカメラを動かしたときに長方形がサザエさんの
EDの家みたいに歪むのは動体歪みというものなんですね。)
アーム・三脚の代わりになるようなものを考えてみます。
ADAPTIVE_THRESHという賢そうな(?)オプションを渡していたので、てっきり俺レベルがちょっかい
出して良くなるものではないと思い込んでました。が、前処理をはさんで認識の頻度が上がれば
読ませる縦横コーナー数も増やせて良いこと多そうですね!2値化を試してみます。
「intrinsicは有効数字3桁ほどあるっぽいからこれだけ使ってdistortionはなかったことに…」と
妥協の道を進みそうになっていたところを救ってくださってありがとうございます!
cvFindContoursで輪郭線を見つける場合って輪郭を追跡する開始座標は指定できますか?
例えば輪郭を見つけたい対象物の一番左の座標から開始するとか。
できる。
>>731 良ければ方法を教えて下さい。
よろしくお願いします。
733 :
728:2011/11/02(水) 09:49:08.54
>729
distortionがあまり問題にならない{カメラ,アプリ}ならば無視するのもアリかな.
パターン撮影時は,N枚の画像から得た特徴点データをすべて纏めてみたときに
・特徴点が画像縁ぎりぎりまで存在すること
・特徴点分布が偏らないこと(画像中心側に多い とか 画像右側に多い とかはよくない)
に注意する.
・パターンとの距離も画像によっていろいろ変えるべき
という記述もどっかで見たことある気がするけど,これは本当かどうか不明.
2値化は画像次第だけど,特に,撮影画像上でパターン面の明暗変化があるような場合では,
cvAdaptiveThreshの結果を確認しながら自分で満足のいく結果を作ったほうが結局近道になると思う.
(その際フィルタ半径はデフォルトを使わずにかなり大きめに(チェスの四角が数個入るくらいに)するといいよ.)
あとは,やってると思うけど,コーナー点座標をサブピクセル精度にRefineする関数に
cvFindChessboardCornersの結果を食わせると良いかも.
734 :
679:2011/11/02(水) 16:29:48.53
735 :
679:2011/11/02(水) 17:51:05.00
色々やってみたらインタラクティブの各種設定ぽいことがわかりました。
どこが原因か何度か試してみます、いた汚し失礼しました。
>>721 大方その手順で出来ました。有難う。
でも、かなり面倒だった。
737 :
727:2011/11/02(水) 23:25:51.16
>>733 またまたアドバイスありがとうございます!
>distortionがあまり問題にならない{カメラ,アプリ}ならば無視するのもアリかな.
言われてみれば、カメラについては問題になりそうではありますが、アプリにとっては効果が薄いかもしれません。
というのもアプリは複数台カメラによるマーカー認識+3次元座標推定を考えていて、
マーカー認識時の誤差がレンズ歪みによる誤差を大きく上回るかもしれないからです。
ですので一度最後までやってみてどこの誤差が精度に最も影響しているかを判断したいと思います。
特徴点分布の広がりや偏りは気を払っていませんでした。
枚数を増やしつつこれらに気をつけようと思います。
距離も離れると認識してくれないので近くで済ませたものが多かったです。
さっそくcvAdaptiveThresh()やってみました。フィルタ半径を大きくしないと中に穴が空いちゃうわけですね。
現時点では(まだ三脚の代わりも用意しておらず)手探りで進んだり止まったりです。
まずは認識できるサイズを7x10かそれに近いサイズにしていきたいと思います。
あとアングル決めでのプレビューは前処理のみにして作業時のフレームレート低下を防ぎ、
アングル決定後にチェスボードを認識、という方法で進めていこうかなと思いました。
サンプルコードそのまんまですが、cvFindChessboardCorners()の結果をcvFindCornerSubPix()に渡してはいます。
ご丁寧なお心遣いありがとうございます!
質問させてください。
cvConvexityDefectsはCvConvexityDefect構造体のシーケンスを返すとのことですが、
このcvConvexityDefect構造体のメンバにアクセスするにはどうしたらよいのでしょうか。
よろしくお願いします。
何を?ビヨンセの動画?
>>739 ライブラリのリンクが切れてるってことだろ
そんなの使わなくても php opencv でググればいくらでもあるだろ
なぜOpenCVには配列にアクセスするための
cvGet2DとかcvGetReal1Dといった関数があるのだろう。
普通に配列にアクセスするのと違いでもあるのかな。
>>742 SSEではメモリのアライメントを16バイトにする必要があって
最適化するためにはパッディングがいる。
そうすると普通の2次元配列では隙間が開いてアクセスしにくいので
accessorを通すようになる。
また範囲をはみ出したアクセスを検出してデバッグ時に警告出したりするためにラップしとく便利。
他にもIplImageとCvMatを同じように扱いたいとか持っているデータがfloat,double,intなどの場合があって1要素のサイズが違うので型を意識してアクセスするのがだるいとか。
>>743 ははー、すごすぎて私の理解を超えかかってしまっているのが
我ながら情けないですが、
なんとなくわかりました。
いろいろと効用があるんですね。
詳しく答えていただいて本当にありがとうございました。
745 :
デフォルトの名無しさん:2011/11/15(火) 21:13:58.67
kinectを使ってオプティカルフローをしようとしているのですがうまくいきません
capture.retrieve(cap, CV_CAP_OPENNI_BGR_IMAGE);でカラーイメージを取得した後
cap >> Img;でフレームを取得しようとしたのですが
型 'cv::Mat' の左オペランドを扱う演算子が見つかりませんというエラーが出てきて取得できません
vc++とopencv2.3、openniを使っています
フレームを取得するにはどうすればいいでしょうか
質問するなら変数の型ぐらい書こうぜ
747 :
デフォルトの名無しさん:2011/11/16(水) 08:44:23.45
>>746 あっとすみません!
capとImgどちらもcv::Matです
カラーイメージを取得した後、フレームを取得するにはどうすればいいでしょうかって、
フレームってなに?
普通は動画の1画面
fpsとかでググれ
既に取得済みのカラーイメージとなにが違うの?
厳密に言えば違うけども、普通に考えれば同じかと
どの命令を実行してそのようになったのかエスパーじゃないからわからんが、
動画か連続撮影になってて次の画像を要求しているんじゃないかと妄想してみる
IplImageは表示出来たのか?
OpenCVはそこそこ使いやすいけどkinectをきっかけとして初めて触るという状態で
使いやすいというほどにはわかりやすくないよね.
cv::Mat を使った簡単な画像ビューワでもつくってみて慣れるべきじゃないかな.
画像処理の基礎知識すらないゲヲタが、
いきなり3次元処理しようとしてわけわからんとか言ってるだけにしか見えないんだけどね
画像処理の基礎知識すらない人がそこそこ使えるというのがOpenCVの素晴らしさだと思っていたけど
基礎知識以前の基礎知識がなければなるほど使えるわけもないな。
>>754 画像処理の詳細知識がなくても使えるのがOpenCV。基礎知識がないとまともには使えない。
画像処理の基礎知識がなくても使えるのはImageMagickとか
だと思う
とりあえずコンピュータビジョンやる前に、画像処理は学んでおいて欲しい。
OpenCVの画像処理系の関数を片っ端から試してみるくらいはね。
知識たって大したものは無いからすぐできるよ。それよりフーリエ変換・展開をしらなかったりしたらそっちの方が大変だろうね
>>754
758 :
デフォルトの名無しさん:2011/11/19(土) 16:29:06.89
大変だろうね
いまどきフーリエ変換なんて使わないだろ
>>759 直接つかわないにせよ色々な基礎知識として必要.「高周波成分」とか「直流成分」なんて言葉が
フーリエと全然関係ない分野で記述用語として使われるから.
なんでだ?2.0をCMake2.8.6つかってビルドしたんだが、visualstudio2010でソリューションのビルド
をしても、cv200d.dllとかhighgui.dllとかが生成されないんだが・・・。
同じようなエラーが起こった人はどんな対処をしたのか教えてください。
os:windows7 64bit
>>761 VisualStudioを「管理者として実行」してみた?
MSのLifecam studioとかロジのC910とかソニーのPSeyeって60fpsで撮影できるらしいけど
OpenCVでも60fpsで撮影できるのかな?
できるならどれか買うんだが。
俺が過去にモノクロVGAで試した時は、30fpsは出来たけど、300fpsは出来なかったなー
まぁお遊びだったし環境もバージョンも変わったから聞き流してくれ
>>762 返信ありがとうございます。
一応さっき帰ってきてからもう一度やりなおしててみたんだが、やはり生成されない・・・。
Debug、Release共に.pdbという拡張子のファイルではhighguiだったりcv200だったりは存在するんだが・・・
エラーが起きたのならエラーメッセージを書け。
ソリューションの設定でdllの生成場所を確認せよ。
lib ファイルが作られてないのかな
>>767 STLでエラーが出てるな。
てかOpenMPはVCで標準で入ってると思うのだがなんでこの参考サイトはOpenMP入れてないんだろ。
>>768 一応エラーメッセージ(上の画像はDebugのみですが)ではそのように表示されてますが、dllファイル自体も生成されていないです。
VC++ 2008 Expressで同様にCMakeを使用してインストールした場合にはうまくいきましたが、VisualStudio2010の場合はどうしてもうまくいかないみたいです。
back_inserterが無いって言ってるんじゃない
openCV2.0が手元にないんだけど、多分
cvmodelest.cppのインクルードファイルに
#include <iterator>
を付け加えれば通りそうだけど。
つかOpenCV2.3.1使えばいいのに
772 :
769:2011/11/23(水) 00:17:06.86
連投スマソ
>>767 ためしにこっちでもやってみたらこっちでもなった
結論から言うと
cvmodelest.cppとcvhog.cppで
#include<iterator>
すればいけた。
>>769 >>771 早速の回答ありがとうございます!
指示通りやってみたところ望みのファイルDebugおよびReleaseがうまく作成されました。
OpenCV2.3.1のほうは一度試してみたのですが、ちゃんとPathが通ってるのになぜかリンクのエラーが出て
うまくビルドができないので、2.0でやり直してみることにした結果がこうなりましたww
恥ついでに教えていただきたいのですが、今回のエラーはどういう点がポイントだったのでしょうか?
>>773 VisualStudioが2010になって<vector>や<algorithm>をincludeしても
<iterator>がincludeされなくなったみたい。
>>774 ご返事ありがとうございます。
なるほど。つまりは仕様だったわけですね。
それで手動でincludeする必要がでてきたわけですね!
解決策だけでなく、原因についてまでおしえていただき、どうもありがとうございました!!
リンカ、ローダ、実行時環境がらみの話ってのはみなさんどうやって勉強しましたか
色々触っていく内に自然と。最初はboost系だったかな
778 :
デフォルトの名無しさん:2011/11/24(木) 17:22:26.11
当方、OpenCVは愚か、C++プログラミングすら初心者なのですが、ご教授いただけると助かります。
http://opencv.jp/opencv2-x-samples/point-cloud-rendering 上記サイトのPoint Cloud Renderingに興味を持ち、当方のPCでも動かしたいと思い、
webページにあるサンプルプログラムをコピペし、動作を試みました。しかし、安定のエラーが…
環境はWindows 7(64/32 bit*両方で試しました)にVisual Studio C++ 2010 Expressを導入後、
OpenCV.ver2.3.1(*試行錯誤で他ver(2.3.0/2.3.1)なども試しました)を導入したという状態です。
肝心のエラー内容の詳細は以下です。
1.Win 7 32bitの場合:
[エラーメッセージ]
3D.exe の 0x7645fc56 でハンドルされていない例外が発生しました
: Microsoft C++ の例外: cv::Exception (メモリの場所 0x001adbb0)。
[呼び出し履歴]
→kernel32.dll!7645fc56()
-[下のフレームは間違っているか、または見つかりません。kernel32.dll に対して読み込まれた シンボルはありません。]
kernel32.dll!7645fc56()
opencv_core231d.dll!50eeb1dc()
プログラムをコピペし、[デバック] > [デバック開始]をすると上記のような状態になり、進められません。
どのような原因が考えられるのでしょうか? またどういった解決法がありますか?
サイトのコメントにも書き込んだのですが、解決法の具体的な手法がよくわからなかったので、
ここでご返答賜りたく、書き込みました。長くなってすみません。どうかよろしくお願いします。
>>778 OpenCV 2.2 だと動くっぽいよ
このサンプルが投稿された日にはまだ2.3.0出てないし
>>778 呼び出し履歴のソースが読める範囲で最後はどこ?
fopenのチェックとかをしていないから
画像ファイルがないとかじゃね
vs2010だとプロジェクトフォルダが出来ると思うから、その中の.vcxprojがあるディレクトリに画像入れないと正常に読んでくれないかと
やってみたら、画像等設定しても2.3.1だと同様のエラーが出て動かなかったが、2.2だと動いた。
784 :
デフォルトの名無しさん:2011/11/25(金) 12:30:14.97
>>778です。
連投、申し訳ありません。記入漏れがあったので追記を…
2.Win 7 64bitの場合:
[エラーメッセージ]
3D.exe の 0x********(←忘れました) でハンドルされていない例外が発生しました
: Microsoft C++ の例外: cv::Exception (メモリの場所 0x00******)。
[呼び出し履歴]
→kernelbase.dll!********()
-[下のフレームは間違っているか、または見つかりません。kernelbase.dll に対して読み込まれた シンボルはありません。]
kernelbase.dll!********()
opencv_core231d.dll!********()
Win 7 64bitの場合はメモリアドレス?とカーネルの参照が違っているだけかと(32版と64版は全くの別PCです複数台で試行しました)。
皆さん返信ありがとうございます!
>>779 2.2でやってみようと思います。
>>780 初心者でよくわかっていなくて…。メモリアドレスの最後値はどこまでか、ということでしょうか?
>>781,
>>782 画像を用意していないため、でしょうか。用意してみます。
>>783 なるほど...。結局kernel辺りのエラーがなんなのかよくわかりませんね…
2.2なら問題ないのかな。
785 :
デフォルトの名無しさん:2011/11/25(金) 17:29:27.17
>>778,
>>784です。今日行って****値を調べてきました。
2.Win 7 64bitの場合:
[エラーメッセージ]
3D.exe の 0x75e7b9bc でハンドルされていない例外が発生しました
: Microsoft C++ の例外: cv::Exception (メモリの場所 0x0024c8fc)。
[呼び出し履歴]
→KernelBase.dll!75e7b9bc()
-[下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれた シンボルはありません。]
KernelBase.dll!75e7b9bc()
opencv_core231d.dll!5877b1dc()
なんか再起動の度に値が変わっているような…、あまり重要ではないのでしょうか。
今日は時間が取れなくて、2.2での試行はまだ試せてはいません…
拙考なのでしょうが、結局、Kernel辺りを解決しないと同じような結果になってしまうのではないかと危惧していまして…
2.2ならその辺もまとめて解決してくれるのかなぁ…、とりあえず明日にやってみようと思います。
786 :
デフォルトの名無しさん:2011/11/25(金) 17:36:45.57
>>780様へ
[呼び出し履歴] が表示してくれている文章?で最後の行はどこか、ということだったのでしょうか?
もしそうだとしたら、
[呼び出し履歴] は
KernelBase.dll!75e7b9bc() ←ここから
-[下のフレームは間違っているか、または見つかりません。KernelBase.dll に対して読み込まれた シンボルはありません。]
KernelBase.dll!75e7b9bc()
opencv_core231d.dll!5877b1dc() ←ここまで表示してくれています
ちなみにエラーを出したメモリアドレス近辺はこんな感じでした。意味ないかもですが…
75E7B9B5 push eax
75E7B9B6 call dword ptr ds:[75E7115Ch]
→75E7B9BC leave //←ここでひっかかっている?
75E7B9BD ret 10h
75E7B9C0 int 3
*自動変数
名前 値 型
EAX 0024C850 -
EBP 0024C8A0 -
どう見てもスタック破壊です。
>>785 >拙考なのでしょうが、結局、Kernel辺りを解決しないと同じような結果になってしまうのではないかと危惧していまして…
ちゃんと動くこと確認して書いてるんだからとりあえず2.2でやってみなよ
落ちてるのはデバッガで少しづつ追っていけばcv::projectPointsだと思うが、原因はよくわかんね
Mat &から InputArray に変わったせいかもね
789 :
デフォルトの名無しさん:2011/11/26(土) 16:57:44.19
>>786です。
>>788様へ
当方のために、わざわざ試行していただきありがとうございました!
ご指摘いただきました通り、2.2にて試行してみました。
インクルードは#include <C:\OpenCV2.2\include\opencv2\opencv.hpp>
ライブラリは必要なものがよくわからなかったので、
#pragma comment(lib,"C://OpenCV2.2//lib//opencv_core220d.lib")のように
libフォルダ内全てを読み込ませてみました。
内容は変化したものの相変わらずのエラーが…
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "void __cdecl cv::reprojectImageTo3D
(class cv::_InputArray const &,class cv::_OutputArray const &,class cv::_InputArray const &,bool,int)"
(?reprojectImageTo3D@cv@@YAXABV_InputArray@1@ABV_OutputArray@1@0_NH@Z) が関数 "void __cdecl stereoTest(void)"
(?stereoTest@@YAXXZ) で参照されました。
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "void __cdecl cv::projectPoints
(class cv::_InputArray const &,class cv::_InputArray const &,class cv::_InputArray const
&,class cv::_InputArray const &,class cv::_InputArray const &,class cv::_OutputArray const
&,class cv::_OutputArray const &,double)" (?projectPoints@cv@@YAXABV_InputArray@1@0000ABV_OutputArray@1@1N@Z)
が関数 "void __cdecl projectImagefromXYZ_<unsigned char>(class cv::Mat &,class cv::Mat &,class cv::Mat
&,class cv::Mat &,class cv::Mat &,class cv::Mat &,class cv::Mat &,class cv::Mat &,class cv::Mat &,class cv::Mat &,bool)"
(??$projectImagefromXYZ_@E@@YAXAAVMat@cv@@000000000_N@Z) で参照されました。
1>C:\Users\kanrisya\documents\visual studio 2010\Projects\sagi3D\Debug\sagi3D.exe : fatal error LNK1120: 外部参照 2 が未解決です。
そりゃ実行時エラーじゃなくて、コンパイル(リンク)エラーですが..
ライブラリは
opencv_core220d.lib
opencv_highgui220d.lib
opencv_calib3d220d.lib
の3つ。
そのエラーはopencv_calib3d220d.libの#pragmaがないんじゃないの?
791 :
デフォルトの名無しさん:2011/11/26(土) 18:01:17.32
>>790 返信ありがとうございます。見当違いなエラーを載せてしまってすいません…
教えて下さったように必要ライブラリを絞ってみました。
#pragma comment(lib,"C://OpenCV2.2//lib//opencv_calib3d220d")も追加です。
そして…
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "void 〜
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "void 〜
1>C:\Users\kanrisya\documents\visual studio 2010\Projects\sagi3D\Debug\sagi3D.exe : fatal error LNK1120: 外部参照 2 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
……
うぅ…
ちなみに、
>>781-782とあったので、
画像を
http://opencv.jp/opencv2-x-samples/point-cloud-rendering の上から7行目くらいにある"データセットダウンロード"
から、kinectdepth.raw 、 kinectimage.png 、 l.png 、 r.png の4つを
C:\Users\kanrisya\Documents\Visual Studio 2010\Projects\3D\3D *(.vcxprojがあるディレクトリ)に追加もやりました。
プログラム文内にも要求はあったんですね。見落としてました。
しかし、このエラーは一体なんなんでしょうか…?
>>789 >>791 なんかInputArrayとかOutputArrayとか見えるけど、それは2.3.1から導入されたクラスなんで2.2で出てくるわけないんだけどな
インクルードファイルへ2.3.1のパスが通ってたりすんじゃない?プロジェクトのプロパティのVC++ディレクトリを見てみれば
エラーがなんなのかはLNK2019を調べればわかる
リンクエラーだよ。
未解決の外部シンボル〜ってのは、使われてる関数の実体が見つからないってこと。
失礼。させればいいかわかるよ
796 :
デフォルトの名無しさん:2011/11/27(日) 15:42:51.17
>>791です。
>>792なるほど、2.3.1から〜なんてあったんですね。たしかにインクルードファイルパス(2.3.1)
通したままでした。これが原因だったのでしょうか。直してきます!
>エラーがなんなのかはLNK2019を調べればわかる
ふむ! エラーで調べる、ですね。なんだか難しそうな響きです…挑戦してみます!
>>793 む、むずかしいです… でもご教授ありがとうございます!
>>794-795 おお! これは便利そうですね。大いに活用させていただきます。
教えて下さってありがとうございます!
……英語…?
とりあえずLNK2019エラーまわりから調べてきます!
797 :
デフォルトの名無しさん:2011/11/29(火) 10:58:11.72
>>796です。
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "public: void __thiscall cv::Mat::copyTo(class cv::_OutputArray const &)
const " (?copyTo@Mat@cv@@QBEXABV_OutputArray@2@@Z) が関数 "void __cdecl eular2rot(double,double,double,class cv::Mat &)"
(?eular2rot@@YAXNNNAAVMat@cv@@@Z) で参照されました。
1>sagi3D.obj : error LNK2019: 未解決の外部シンボル "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>
,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXABV?$basic_string@DU?$char_traits@D@std
@@V?$allocator@D@2@@std@@ABV_InputArray@1@@Z) が関数 "void __cdecl stereoTest(void)" (?stereoTest@@YAXXZ) で参照されました。
***以下似たようなのが8行ほど
1>sagi3D.obj : error LNK2001: 外部シンボル ""public: virtual class cv::Mat __thiscall cv::_InputArray::getMat(int)const "
(?getMat@_InputArray@cv@@UBE?AVMat@2@H@Z)" は未解決です。
1>sagi3D.obj : error LNK2001: 外部シンボル ""public: virtual void __thiscall cv::_InputArray::getMatVector
(class std::vector<class cv::Mat,class std::allocator<class cv::Mat> > &)const " (?getMatVector@_InputArray@cv
@@UBEXAAV?$vector@VMat@cv@@V?$allocator@VMat@cv@@@std@@@std@@@Z)" は未解決です。
***以下似たようなのが12行ほど
1>C:\Users\kanrisya\documents\visual studio 2010\Projects\sagi3D\Debug\sagi3D.exe : fatal error LNK1120: 外部参照 29 が未解決です。
=ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ =
もう一度新規プロジェクトを立ち上げて同様(おそらく…)にしてやり直してみました。なんかPC起動の度にエラーが変わるような気がします…
(前はLNK2019のみだったのに…)
LNK2019については自分なりに調べてみました。まぁ、それでもよくはわからなかったのですが…
結局、lib等のリンクがうまくいっていないために参照できないと言っているのでしょうか?
必要なライブラリをリンクしてないだけだろ
799 :
デフォルトの名無しさん:2011/11/29(火) 11:10:18.55
>>797です。
連投すみません。
気になったのですが、インクルードの設定は以下のみでよろしいのでしょうか?
#include <C:\OpenCV2.2\include\opencv2\opencv.hpp>
>>790様にご指摘いただきましたopencv_core220d.lib ,opencv_highgui220d.lib ,opencv_calib3d220d.lib
の各.libに対して以下のような入力が必要、そういったことは考えられるのでしょうか?
#include <C:\OpenCV2.2\include\opencv2\core\core.hpp>
#include <C:\OpenCV2.2\include\opencv2\calib3d\calib3d.hpp>
#include <C:\OpenCV2.2\include\opencv2\highgui\highgui.hpp>
他にもC:\OpenCV2.2\include\opencvにも各種.hファイルがあったのでそれも気がかりです。
初歩的な質問かもしれませんが、
>>797の件、インクルードの設定、
どちらかお分かりの方で返答していただけると助かります。
800 :
デフォルトの名無しさん:2011/11/29(火) 11:19:04.53
>>798迅速なご返答ありがとうございます!
なるほど、やはりそれ関連のエラーということですか…
このプログラム(
>>778)に関して必要となる.libは
>>790様から3つだと
教えて頂き、以下のように設定を試みました。
#pragma comment(lib,"C://OpenCV2.2//lib//opencv_core220d.lib")
#pragma comment(lib,"C://OpenCV2.2//lib//opencv_highgui220d.lib")
#pragma comment(lib,"C://OpenCV2.2//lib//opencv_calib3d220d")
しかしながら安定のエラーです…
もしかしてまだ足りない.libがある、ということなのでしょうか…
このエラーはリンク失敗・不具合のときに出るのでしょうか?
必要.libが足りないときに出るのでしょうか?
ご教授いただけると幸いです。
いっそ全部リンクしてみたら?
バージョンは直してね
#ifdef _DEBUG
#pragma comment(lib,"opencv_core232d")
#pragma comment(lib,"opencv_imgproc232d")
#pragma comment(lib,"opencv_highgui232d")
#pragma comment(lib,"opencv_ml232d")
#pragma comment(lib,"opencv_video232d")
#pragma comment(lib,"opencv_features2d232d")
#pragma comment(lib,"opencv_calib3d232d")
#pragma comment(lib,"opencv_objdetect232d")
#pragma comment(lib,"opencv_contrib232d")
#pragma comment(lib,"opencv_legacy232d")
#pragma comment(lib,"opencv_flann232d")
#else
#pragma comment(lib,"opencv_core232")
#pragma comment(lib,"opencv_imgproc232")
#pragma comment(lib,"opencv_highgui232")
#pragma comment(lib,"opencv_ml232")
#pragma comment(lib,"opencv_video232")
#pragma comment(lib,"opencv_features2d232")
#pragma comment(lib,"opencv_calib3d232")
#pragma comment(lib,"opencv_objdetect232")
#pragma comment(lib,"opencv_contrib232")
#pragma comment(lib,"opencv_legacy232")
#pragma comment(lib,"opencv_flann232")
#endif
これはひどいながれ
>>797 だからOutputArrayが出てくるってことは2.3.1のインクルードファイルを読み込んでるんだって
ヘッダファイルは2.3.1なのにライブラリが2.2だから型の合う関数が見つからないってエラー出してるんだろう
たぶんVC++ディレクトリのパスで2.3.1の方に通してると予想
わからなければ一度2.3.1の方アンインストールするといい
でもこの人フルパスでインクルードしてるんでしょ?
フルパスで指定した2.2のopencv2\core\core.hppの中からincludeされてる"opencv2/core/types_c.h"は
インクルードパスから検索されちゃうんじゃね
なるほど。それかも。
ていうか、ヘッダにしろライブラリにしろ、ソースの中にフルパスで書くとかワイルドすぎる
研究者のコードでもMakefileに
gcc hoge.c -I/home/foobar/project/hoge -O2 hoge
とか書いてあることがある
おまえら気をつけろよ
お前らが環境変数 Path あるいは PATH の事を教えてやらないからこうなった
コンパイルも通ってないのにPATHなんて関係ないじゃん
つか
>>767にあるインストールの際に参考にしたHPの影響だろう
>>812 いやすまん、URL書きたくなかったんで767って書いちゃった
「OpenCV インストール」でググるとトップに出てくるししょうがないよ
変形前画像と変形後画像の点対応から最小自乗法で変換パラメタを求めたい.
扱う変換は{X方向拡大,Y方向拡大,回転,並進}だけにしたい.
(Affine変換には歪(skew)があるが,この自由度はいらないので除きたい)
Affine変換なら線形な(cvSolveが使える)形の式にできるのですが,
上記の変換を考えると,そういう形の式にどうしてもできません…
なんとかして線形的に解く方法はないでしょうか?
変換パラメータってどういう意味だ・・・?
角度θ、スケールn% とか?
その場合だと、変換の順番や数によって答えはいくらでも出てくるから、一意に求めるのは無理だよね。
言葉が悪かったでしょうか.
要するに変換するために必要な値 です.
>角度θ、スケールn% とか?
のような個々の変形要素(?)毎の値が得られれば使いやすいですが,
変換後座標ベクトルV' = 変換行列M * 変換前座標ベクトルV
のM(例えばAffine変換なら2*3行列)の要素値の形でも構いません.
X方向拡大=x、Y方向拡大=y、 回転=r、 並進=[t1、 t2]としよう
M=[x*cos(r), -y*sin(r),t1]
[x*sin(r), y*cos(r),t2]
2x2の成分を眺めると、M(2,1)/M(1,1)=-M(1,2)/M(2,2)=tan(r)だから
M=[a,b,c]
[d,e,f]
拘束条件 a*b+d*e=0
として未知数6,拘束条件1のラグランジュ未定乗数法で解けば良い
>>817 M=並進・回転・拡大
としたのはなぜ?
一般的ではあるけど。
shearってskewとも言うのか・・・
819 :
814:2011/12/02(金) 09:33:31.28
>817
ありがとうございます…しかし
>ラグランジュ未定乗数法で解けば良い
の部分が具体的にどうやって解くのかわかりません…
調べて見ると,各変数で偏微分した結果の連立方程式を
パラメタベクトル P = [a,b,c,d,e,f](転置) として
行列*P = λ*P
の形にして,λを最小固有値として解く,というのがあったのですが
どう頑張っても自分には↑のような形にできないのですが…
それとも他の解き方があるのでしょうか?
(あと,自分で考えた条件だと a*d+b*e=0 になったのですが同じこと?)
cvFindHomographyじゃいかんの
821 :
デフォルトの名無しさん:2011/12/02(金) 12:27:24.31
>820
Affine変換や射影変換ではなく,
変形を 並進・回転・拡大 だけに制限したいのです.
形が歪まないで欲しい(長方形は変換後も長方形)というか.
データの実際の変形はアフィン変換や射影変換だったとしても,
それをできる限り近似する 並進・回転・拡大 だけの変換 を得たいのです.
変換前後画像の組の例をいくつかどこかにアップロードしたまえ。
それと、回転や拡大の操作の順序は決まっているのか、どうなのか。順序が決まっていて一回ずつなら、簡略化できるかもしれない。
歪まないで欲しいなら、拡大率はXとYに分けちゃ駄目じゃないか?
それを分けたら、長方形が正方形や平行四辺形になったりするよ。
824 :
デフォルトの名無しさん:2011/12/02(金) 20:21:33.65
OpenCVで画像処理を新しく勉強する予定の初心者です
Windows7(32bit) Visual Studio C++ 2008にOpenCV.ver2.1を入れている環境で
まずは簡単なエッジ抽出プログラムを組んでみようと思ってます
試しに
ttp://img10.shop-pro.jp/PA01048/330/product/7862124.jpgの服ボタンの画像を bmp方式で保存した後に以下のようなソースコードで輪郭抽出を行った所、内部の輪郭も抽出されました
欲しい部分は外側の円部分であり、内部の余分なエッジを除去したいのですが何かいい手法はありますか?
IplImage* img = cvLoadImage("C:\\Users\\7862124.bmp", CV_LOAD_IMAGE_GRAYSCALE); //グレイスケール画像読み込み
IplImage* img2 = cvCloneImage (img);
cvSmooth(img,img2,CV_GAUSSIAN,5); //ガウシアンフィルタ
IplImage* img3 = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
cvCanny(img2,img3,50,200); //Cannyエッジ
cvNamedWindow("OpenCVTest",CV_WINDOW_AUTOSIZE); //画像出力用のウィンドウを作成します
cvShowImage("OpenCVTest",img3); //ウィンドウに画像を表示します
cvWaitKey(0); //何かキーが押されるまで待ちます
cvReleaseImage(&img); //リソースを開放します。
cvDestroyWindow("OpenCVTest");
825 :
デフォルトの名無しさん:2011/12/02(金) 21:39:29.76
>>817 ラグランジュの未定乗数方使わなくても、
(a,d)固定して、(b,e)について最小化(これは行列演算で一発でとけるよね)
(b,e)固定して、(a,d)について最小化(これは行列演算で一発でとけるよね)
上を何回も繰り返す
ってのをやっても、2乗誤差なら最適解に収束するね。
ラグランジュ未定乗数法が謎で抵抗あるなら、こっちやれば?
826 :
デフォルトの名無しさん:2011/12/02(金) 21:44:21.16
今までは他の言語でやってましたがこの度C++を始めました
行列計算はOpenCVが便利だと聞きました
白黒のグレイスケール画像を左から見ていき初期変動部分だけ残すような計算がしたいです
少し見辛いですが下の左行列を右行列として変換するような感じです
0 0 0 1 0 0 0 0 1 0
0 0 1 0 1 0 0 1 0 0
0 0 1 1 1 → 0 0 1 0 0
0 1 0 1 1 0 1 0 0 0
0 0 1 1 0 0 0 1 0 0
行を左から走査していき最初に変動した列の値だけを残して
残りは全て0に変更して取り除くような演算を行いたいです
単純にfor文で組めばいいのでしょうか?
うん
>>829 では、最初の1はifで検出を行えばよいのでしょうか?
その後、その1以降を各行列にそれぞれ=0と指定し続ければいいのですか?
0 0 0 1 0 0 0 0 1 0
0 0 1 0 1 0 0 1 0 0
↓もし1ならば、↓残りは全て=0
0 0 1 1 1 → 0 0 1 0 0
0 1 0 1 1 0 1 0 0 0
0 0 1 1 0 0 0 1 0 0
といった感じで
opencv関係なくね?w
>>828 その処理内容に特化した関数は知らないしありそうにもないと思うので、単純にfor+memset()でいいと思います。
なるほど
>>814 線形一発とはいかないけど、非線形最適化をしない方法を導出してみた。
回転行列をR、スケール行列(対角行列)をS、平行移動ベクトルをt、変換前後の点iを前mi、後ni、点の数はN個、行列転置を'、逆行列をinv()、L2ノルムを|| ||で書くよ。
求めたいのは、誤差e= sum || R*S*mi+t-ni ||^2 を最小化するR、S、t。
まずeをtで偏微分すると、
de/dt = sum ( ni-R*S*mi-t )
de/dtはゼロベクトルだから、回転前後の重心をmg、ngとおくと
t=1/N*sum(ni)-1/N*RS*sum(mi)
=ng-R*S*mg ...(1)
tがRとSの関数であるので、RとSを求めて最後にtを求めることにする。
(1)をeに代入すると、
e=sum || R*S*(mi-mg)-(ni-ng) ||^2
pi=mi-mg、qi=ni-ngとおくと、
e=sum || R*S*pi-qi ||^2
次にeをSで偏微分すると、
de/dS=S*sum(pi*pi')-R'*sum(qi*qi')
de/dSはゼロ行列だから、P=sum(pi*pi')、Q=sum(qi*qi')とおくと
de/dS=S*P-R'*Q=0
S*P=R'*Q
S'*S=inv(P')*Q'*Q*P...(2)
Sは対角行列だから、(2)の対角成分の平方根がそれぞれx,y方向のスケールに相当する。
次にS*P=R'*Qより
R=( S*P*inv(Q) )'
だけど、Rは行列式が1の直交行列だから
U*D*V'=( S*P*inv(Q) )'...(3)
と特異値分解して
R=U*diag(1,det(U*V'))*V'...(4)
が欲しい回転行列R。det(A)は行列Aの行列式で、diag(a,b)はaとbが成分の対角行列ね。
RとSが求まったので、(1)に代入すればtが得られる。
計算順で行くと、(2)->(3)->(4)->(1)。
気をつけるのは、miとniにノイズが多いと(2)が必ずしも対角行列にならなくて、
誤差の大きいSからRとtを計算すると誤差の影響が大きくなっていく。
だからより高精度にしたいなら上記計算で求めたのを初期値にして非線形最適化かな。
>>826の言うように、スキューがほとんどゼロの時にアフィン変換から強引に直交化する方法も考えてみた
最初にアフィン変換行列を求めて、その2x2の部分行列をMとすると、
e=||M-RS||^2 を最小化するRとSを求めることになる。平行移動はアフィン変換そのままを採用。
ここで|| ||はフロベニウスノルムね。
de/dS=S-R'*M=0だからS=R'*M
S'*S=M'*MよりM'*Mの対角成分の平方根をスケールにする。
R=inv(S)*MよりU*D*V'=inv(S)*Mと特異値分解して
R=U*diag(1,det(U*V'))*V'
こっちの方が楽だね。アフィン変換はOpenCVに求める関数あるし。
どっちの誤差が大きくなるかはわかんないけど。
ところで
>>825って収束時に拘束条件満たすの?
838 :
デフォルトの名無しさん:2011/12/03(土) 02:14:32.51
>>834-836 平行移動の自由度2、拡大縮小の自由度1(XYのスケールが同じ)、回転自由度1の4自由度だったら、
min|| q-Rp-t ||^2
を、Rとtについて解けばよい。
R=|x y|
|-y x|
とパラメタライズすればよくね?
839 :
デフォルトの名無しさん:2011/12/03(土) 02:24:05.17
>>837 >>825が拘束条件満たすかということだけど、
(a,d)固定して、(b,e)について最小化をするときに、a,dが定数だから、b,eの1次等式制約になるでしょ。
eをbで表せば、目的関数が変数一個(e)の2次式になって、制約なしの形になる。
これなら極値は簡単に求まるよね。
目的関数が2次式の場合、等式制約を満たすように2変数ペアで動かしながら最適化つーのは、よくやるね。SVMとかでもやってる。
>>838 それは普通の相似変換じゃん
814が欲しいものとは違う
>>839 そもそも最適解に収束することが約束されてんの?
もしかして交互法ってやつ?よく知らないから文献あったら教えて
初期値(最適解じゃないところ)をf_0(R_0, t_0)とすると、一回の処理で、f_1<f_0になるから、2乗誤差=f(r, t)>0(すべてのR,tについて)だから、何回も繰り返せば、どっかに収束するんじゃね。
XYのスケール比率が強烈に違ったりしなければ、普通に良さげな解がでるんでね?
たぶん実用上はほとんどないんだろうけど、局所解に収束しそうでなんか嫌だな
843 :
デフォルトの名無しさん:2011/12/04(日) 06:16:21.97
>>842 そうだな。まぁ、2次の非線形制約が付いてる時点で、局所解があるからね。
ラグランジュの未定乗数法つかっても、そこは同じだし。
>>836も言ってるけど、この辺のやり方で初期値計算して、そっから先は反復計算するしかねーな。
おまえらが何言ってるかサッパリわからんorz
その辺勉強したいんだけど、オススメの本があったら教えてくれ。入門的なの。
微積分の入門書でもあされば良いんじゃないかね
数学の話はその人がどれだけの知識を前提にするかで全然違うから
ぶっちゃけソースコードから学べる数学の本が欲しい
ソースなら読めるんだが、数式になると訳わからんw
微積分か。読んだが身についてないな。
前提で違うのはたしかにその通りだ。でかい本屋に行ってじっくり探してみるよ。
848 :
デフォルトの名無しさん:2011/12/05(月) 10:56:53.15
良書は重要だけど、まずは
二次計画問題、線形計画問題、整数計画法、非線形最適化
とかでぐぐってみては?
>>846 Numerical Recipes in Cは?
Numerical Recipes はあまりいいコードとは言えないと思うけど。
あくまで理論と実装の確認に使うだけならオススメ。
851 :
デフォルトの名無しさん:2011/12/06(火) 13:59:05.34
離れた並行ではない二線の延長上の交点を求めたいのですが
二線のサンプル画像をハフ変換による直線検出を行い
得られた直線a,bの交点の計算は最終的に線aの2点a1,a2と線bの2点b1,b2を
x = - (b1 - b2) / (a1 - a2)
y = (a1*b2 - a2*b1) / (a1 - a2)
で算出する事によって二線の交点x,yを出すと思いますが
傾きを求めるのに用いる合計4点はどうやって取得すればいいのでしょうか?
できれば二線の端と端の座標を取得してそこから計算を行いたいです
複数枚の画像から、それぞれの画素の輝度の分散や最頻値を使用して画像を作成したいのですが
1画素毎に見ていって値を取るしかないのでしょうか
>>852 それ以外にどんな方法があるのかい?
cvMat::at が遅いとかなら「複数枚」の画像を BYTE の(一重でも多重でもいいけど)配列に
読み込んでしまってから処理すれば相当速くなりますおし
>>851 OpenCVが返すのが角度なんだからそっから4点を求めるより、そのまま傾きを求めるほうが直接的
855 :
851:2011/12/09(金) 01:33:00.92
>>854 ありがとうございます
端と端の座標を取得したいのは線分でない列を別領域として分けたいからです
図にすると以下のような感じになります
領域(その他)
-------------------------------------------------
/
/
/ 領域(a)
/
-------------------------------------------------
交点 領域(その他)
-------------------------------------------------
\
\ 領域(b)
\
\
-------------------------------------------------
領域(その他)
そのために線分の端から端を座標取得したいのです
857 :
デフォルトの名無しさん:2011/12/11(日) 23:13:39.82
cvsmoothでアルファ有画像をぼかすと周辺のオールゼロ(透明黒)を拾って輪郭が黒く濁るのですが防ぐ設定は有りますか?
透明領域に同色を塗っとくとか無しで
24bitアルファ無し画像に変換したらダメなん?
>>857 ない.アルファチャンネル付き画像の扱いのバグは取れてないので各自工夫して回避する以外ない.
861 :
デフォルトの名無しさん:2011/12/13(火) 19:36:05.06
int point_count = 100;
CvMat* points1; CvMat* points2;
CvMat* status; CvMat* fundamental_matrix;
points1 = cvCreateMat(1,point_count,CV_32FC2);
points2 = cvCreateMat(1,point_count,CV_32FC2);
status = cvCreateMat(1,point_count,CV_8UC1);
/* ここで点座標を埋めます ... */
for( i = 0; i < point_count; i++ )
{
points1->data.fl[i*2] = <x,,1,i,,>;
points1->data.fl[i*2+1] = <y,,1,i,,>;
points2->data.fl[i*2] = <x,,2,i,,>;
points2->data.fl[i*2+1] = <y,,2,i,,>;
}
fundamental_matrix = cvCreateMat(3,3,CV_32FC1);
int fm_count = cvFindFundamentalMat( points1,points2,fundamental_matrix,
CV_FM_RANSAC,1.0,0.99,status );
と書いてありました。
<x,,1,i,,>といった部分にどのように画像から求めた座標を埋めていくのかがわからず、作業が進みません。
また、カンマ間が空欄となっている部分(第2、5要素)には何を入れたら良いのでしょうか?
初歩的な質問かもしれませんが、わかる方がいらっしゃいましたら教えてください。
862 :
デフォルトの名無しさん:2011/12/13(火) 19:39:35.99
>861 に関して。
書き込みに失敗してしまいました。すみません。
openCV2.2を使って、F行列を求めたいと思い
cvFindFundamentalMat関数を利用したいのですが、リファレンスを見た結果、
上のように書いてり、質問させていただきました。
画像1のi番目のx座標って意味だ
ただのスカラーだから第2、5要素なんてない
F行列が何か知らずに関数の利用だけしようとするからわけがわからなくなる
大津の方法で画像を二値化はできるけど
そのときの閾値だけを調べる方法ってありますか?
閾値を整数で出力したいのですが
ソースコード見て値出力するように変えればいいじゃん
866 :
デフォルトの名無しさん:2011/12/14(水) 19:51:07.39
>863
回答ありがとうございます。
自分でも一応F行列については調べて勉強はしたんですが、勉強不足だったみたいです。
もう一度勉強し直します。
■■■■■■■■■■■■■■■
■■■■■■■■■■■ ■■■■
■■■ ■■■■■■ ■■■
■■ ■■■■■■ ■■■■
■■ ■■■■■■ ■■■■■
■■■■■■■■■■■■■■■
■■■■■■■■■■■■■■■
二値化した画像でこんな感じになっている時
黒い領域の輪郭をとって、内側に開いた白い穴を埋めたい、という時はどうすれば良いのでしょうか
クロージングでは消えないサイズの穴でどうしたものかわかりません
>867
「内側」の定義によると思うけど…
仮に「白い領域であって,領域内の全ての画素位置が画像縁でないもの」を「内側」とみなすとしたら
白い領域全てについてそのことを調べて,内側なら埋めればよいのでは?
元の画像と、収縮した画像を反転させた画像のANDを取るとか
873 :
デフォルトの名無しさん:2011/12/15(木) 19:22:52.02
>>873 マジか。。1か月前に1.1版買ってしまったよ。。
なぜ今頃1.1版が必要だったのか
1kくぁ月早く手に入ったんだからいいじゃん
おれに譲れ
蝶本とどっちにするか迷ってる
880 :
デフォルトの名無しさん:2011/12/16(金) 22:45:05.21
座標変換
882 :
デフォルトの名無しさん:2011/12/17(土) 02:22:41.29
アフィン変換の余白を埋めないか透明にする指定できますか?
質問いいでしょうか
createsamples.exeで一つの画像からnum100のvecファイルを作成したのですが、
このvecファイルを5個ほど用意して一つに結合するやり方を教えてください。
num100のvecファイルが5個 → num500のvecファイルが1個にしたいのです
>>290を参考にしたのですがいまいち良くわからなかった…
ファイル結合ソフトを使用して結合しても、num100としか認識してくれません
アドバイスおねがいします
cvsmoothの端っこをどう処理しているのか知りたいんですけど
関数の中身は見ることができますか?
>>882 マスク画像にも同じ変換かけて
結果をANDとかORとかする
>>882 borderModeの説明に思いっきり書いてあるじゃないか
だからそれを訊いてんじゃないか
いちいちあるか分からないのに構造体みるほど暇じゃないんだよ
せっかく日本語マニュアルまで用意されてんのに何なのかしら
あっ関数の引数にあんのか、先に言えよ
昔ならここでブチ切れるところだが、膝に矢を受けてしまってね。
891 :
デフォルトの名無しさん:2011/12/19(月) 20:42:17.48
cvPointでそのまま計算に用いたい場合は
a = cvPoint(x-y,x+y)といったような指定でもいいんですよね?
取り込んだ画像を左側に向かってずらして右側に真っ黒な空間を作りたい場合
2次元のアフィン変換を行えばよいのでしょうか?
今まで研究室でmatlabを使ってましたが今度opencvに切り替える様に言われて
来年から新しく勉強を始める予定です
年末の休みに参考書を見ながら勉強したいのですが何かオススメはありますか?
とりあえず出版されている本には全て目を通しておくといい
4冊くらいあった気がするが
open cv出始める簡単動画プログラムを参考に,windows form アプリ上で,webカメラから取得した画像を動画として保存したいのですが,うまくいきません。
cvWriteFrameを実行するとエラーになってしまいます。コンソールでは問題なくできたのですが,何が問題なのかわかるかたいらっしゃいませんでしょうか?
まずFrameは正確にキャプチャ出来ているか?(サイズ、カラーパターン等)
次にVideoWriterの設定は間違っていないか?(特にcodecやフレームレート、最初は無圧縮にしとけ)
試しに,windowに画像を表示させたら問題なく表示されます。
VideoWriterの設定も丸写しなんですが...
WriteFrameの第一引数を0にしたらエラーにはならないようでした(もちろん保存はされませんが...)
このスレの住人が全員その本を持っていると思うなよ
丸写しって言われてもわからん
すいません。そうですよね。
namespaceの外側に記入
CvCapture* capture;//画像
CvVideoWriter* rec;
IplImage* srcImage;
タイマーのイベント内に記入
capture = cvCaptureFromCAM(0);
srcImage = cvQueryFrame(capture);
cvCreateVideoWriter("movie.avi",CV_FOURCC('M','J','P','G'),50,cvSize(Image->width,Image->height),1);
と記入しています。
せめてどんなエラーが出たかくらい書いてくれないと、超能力を使っても無理です
>>900 cvCreateVideoWriterをrecに代入してないのは記入忘れだよね?
とりあえずCV_FOURCC('M','J','P','G')をCV_FOURCC('D','I','B',' ')にしてみたら?
「エラーが出ました!」しか言わない自称OpenCV初心者(実はプログラム初心者)ってマジイラつく
>>902 CV_FOURCC('D','I','B',' ') に変更したら保存出来ました。
みなさんありがとうございました。質問の仕方も勉強します。
906 :
デフォルトの名無しさん:2011/12/22(木) 23:47:45.45
ご質問があります.
気が向いた方,どなたか教えて下さい.
OpenCVで探索範囲を限定したテンプレートマッチングをするにはどうしたらいいでしょうか?
探索範囲だけ切り抜くしかありませんか?
cv::goodFeaturesToTrackのようにROIで範囲を限定してやることはできないでしょうか?
ご質問キター
908 :
デフォルトの名無しさん:2011/12/23(金) 01:03:40.05
>>907 教えて頂けると幸いです.
どうぞ宜しくお願い致します.
「OpenCV テンプレートマッチング」で100回ググれ
910 :
デフォルトの名無しさん:2011/12/23(金) 01:55:01.15
>>909 それなりに探してはみたのですが,
中々,適当な解答が得られず困っています.
>>1 詳しい解説トンスル これなら韓国が怒るのも当然の気がする
日本人VS韓国乞食
(2011年現在) 日本人 朝鮮猿
ノーベル賞(自然科学分野) 15人 0人
ノーベル賞(人文学分野) 2人 0人
フランクリン・メダル(科学等) 7人 0人
ボルツマン・メダル(物理学) 2人 0人
フンボルト賞(人文、理、工、医、農) 9人 0人
キッピング賞(化学) 5人 0人
クラフォード賞(天文学等) 2人 0人
ブルーノ・ロッシ賞(天文学等) 2人 0人
IEEEマイルストーン(電子技術) 14件 0件
ウィリアム・ボウイ・メダル(地質学) 2人 0人
ホロウィッツ賞(生物学) 1人 0人
コッホ賞(医学) 6人 0人
ラスカー賞(医学) 6人 0人
ガードナー国際賞(医学) 10人 0人
ウルフ賞(科学、数学、医学、芸術) 11人 0人
プリツカー賞(建築) 5人 0人
フィールズ賞(数学) 3人 0人
コール賞(数学) 4人 0人
ガウス賞(数学) 1人 0人
ショック賞(数学・芸術) 3人 0人
ピューリッツァー賞(報道) 3人 0人
MatにROIを設定->matchTemplate
なんでこれができない?
913 :
デフォルトの名無しさん:2011/12/23(金) 21:01:02.50
>>912 有難うございます.
おかげさまでできました.
でも,オフセットは自分で足さなきゃならないんですね
単純に行列計算のライブラリとして使うだけでも
ublasより数倍速い気がするんだけど
気のせい?
Eigen使ってるからじゃね
ベンチマークとれや
916 :
デフォルトの名無しさん:2012/01/02(月) 16:16:22.34
>ご質問
自分を持ち上げるな。
>超初心者
初心者超えたら中堅だろ。
まず10年間C++を勉強しろ
サイズを合わせればよい
VS2010、OpenCV2.1を使用しています
double area = fabs(cvContourArea(Contour, CV_WHOLE_SEQ));
として輪郭内の面積を求めたいのですが
引数が足りないとエラーが出てしまいます
入力候補には「int oriented = 0」なるものが出てくるのですが、これはなんなのでしょうか
>>920 どんなエラーなのかよくわからんが、Contourの中身が空なんじゃね?
>>920 cvContourArea()は手元のOpenCV1.1のドキュメントだと2引き数だけど、
cvContourAreaとorientedで検索すると3引き数のcvContourArea()が見つかる。
そこの説明によると、
--
If zero, the absolute area will be returned. Otherwise the returned value mighted be negative
--
ということだ。
なので、
--
double area = cvContourArea(Contour, CV_WHOLE_SEQ, 0);
--
で医院で内科医?
>>921 どんなエラーって、引き数が足りないと書いてあるじゃん。開き盲?
2.3.1にしたらCvvImageがみつからない.
無くなった?
>>916 ライブラリに頼ろうとするな
自分で画素を直接操作した方が楽
926 :
デフォルトの名無しさん:2012/01/05(木) 23:04:24.64
CvSVM について質問があります.
多クラスの識別をひとつの識別器で行なう場合の CvSVMParams の重み設定はどのようにすればよいでしょうか?
クラス A B C
データ1 2 4 0 1
データ2 0 1 3 1
データ3 1 2 2 2
・・・
データn 0 2 3 2
上記のデータ例で Class列を正解クラス(クラスは0〜2の3クラス)とし,A〜Cを特徴量として学習させる場合,
1.クラス0,クラス1,クラス2の順で重みを設定する(クラス番号順)
2.クラス2,クラス0,クラス1の順で重みを設定する(読み込みデータの出現順)
のうちどちらでしょうか?
リファレンスを確認してみましたが,記載されていませんでした.
よろしくお願いします.
VS2005使用.
複素数群Csの絶対値を結果受取用vector ABSsに入れる関数を以下のように書いたところ…
void Do( const std::vector< std::complex<double> > &Cs, std::vector<double> &ABSs )
{
ABSs.resize( Cs.size(), 0 );
std::transform( Cs.begin(), Cs.end(), ABSs.begin(), std::abs<double> );
}
普通はコンパイルが通るのですが,OpenCV2.3.1のヘッダを
#include "OpenCV2/opencv.hpp"
としてインクルードすると何故かコンパイルエラーになってしまいます.
(error C2914: 'std::transform' : 関数の引数があいまいなため テンプレート 引数を減少できません。
みたいなエラーがたくさんでる)
とりあえずの対処方法として当該関数を他の翻訳単位に移動させれば回避できそうではあるのですが
気持ち悪いです.
原因等わかる方おられましたら ご教授願いたくよろしくお願いいたします.
>>927 OpenCV2.3.1かな
"opencv2/contrib/retina.hpp"でincludeしてる
#include <valarray>
が原因なような気がする
929 :
デフォルトの名無しさん:2012/01/08(日) 03:51:35.88
エッジの強度の調べ方をどなたか教えて頂けませんか?
特徴点を検出して、エッジの強度でマッチングさせたいのですが。。。
>>927 何か名前が衝突してるんじゃないか
どこかのヘッダの using namespace を外せばうまくいくかもね。
目で見た方向にマウスカーソルが動くソフトが欲しい。
欲しいのはこんなのです。
pc上部にあるカメラから目の位置を特定して、白眼の中の黒眼の位置から向いてる方向を判断する。
少しずつその方向にカーソルを移動させる。瞳孔位置判定してピンポイントに座標判断なんて高度なやつではない。
頭位置は完全固定、キャリブレーションで画面4すみの眼の形を学習する。
似たようなやつありますか?
>>932 早速試してみたんだが、軽くてすげぇなこれ。キャリブレーション部分がdirectshowと顔検出がopenCVでつくってあるのかな。
ただ、マウスカーソル動かないのが難点だ。。
>>928 ありがとうございます.
valarray単体includeでも同エラーが発生することを確認しました.
valarrayをincludeすることによって何が起こるのかはさっぱりですが…
とりあえず opencv.hpp を使わずに,
ちゃんとそのcppに必要最小限なヘッダだけをincludeすれば今回は対処できそうです.
935 :
デフォルトの名無しさん:2012/01/13(金) 23:09:59.54
卒業制作で交通量をカウントするプログラムの制作を予定しています。
オブジェクト検出を用いて動画中の車を
検出しようと考えているのですが、そこから
画面内から画面外へ通過した物体の数をカウントするには
どうすればいいでしょうか?
カウントはトラッキングが命。
画面ないにラインを設けなさい。ラインをまたいだらカウント
神奈川あたりでセミナーかサークルってありませんか?
良いセミナー受けたきゃ東京行け
神奈川なら十分日帰り出来る距離だろ
2.3.1解凍してもinclude\opencv2の中にopencv.hppしかないのはなぜなんだ?
>>939 ソースならインストールプロジェクト実行時にヘッダーファイルがコピーされるようになってる
特徴点を見つけてマッチングさせる方法教えて
2.3がまだ不安定な感じするから
まだ2.2を使っている
2.3を本格的に使ってる人いる?
俺はいまだ2.1だ
C++拡張って名前とか固定されてるの?
いつかインターフェイス変更されそうで怖いから
今だにCで使ってる
>>943 trunk 追いかけてる.不安定さはあんまり観じないな.ハードウェアとかファイルIOまわりで込み入ったことしないせいだと思うけど.
俺も2.1で止まってるなー
機能的に満足してるから、様子見してる間に中身だけどんどん変わってった感じ
cv::Mat
のメンバー関数ぐらいは固定で変わらないと信じたい
>>942 ありがとー。
使い方がまだよくわからない
>>949 よくわからないなら蝶本読むか買ってみるのもいいよ
図解で詳しく解説してるし
C++対応したとはいってもMouseCallBackをクラス内ではそのまま使えないのか…
質問よろしくお願いします。
以下のプログラムなのですがコンパイルは出来るのですが実行したところ
r6010 abortと表示されて画面が表示出来ませんでした。
画像の位置も問題なく、Aのところでエラーが出ているようなのですが分かりませんでした。
もしよろしければアドバイスお願いします。
http://codepad.org/O7TqnhA6
画像やxmlをおくパスを確認してみたら?
m.chiebukuro.yahoo.co.jp/detail/q1072179035
>>952 C:\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml
にファイルはあるの?
>>953-954 場所もカレントディレクトリーにコピーしてみたりと色々とやってるんですが
改善が見られず他に原因が分からないのでどうしようもない状態です。
ただもう少し頑張ってopenCVの設定を見直してみようと思います。
回答いただきありがとうございました。
Windows7(64bit) OpenCV2.3 Visual Studio2010(32bit)の環境下でのコーディングを行なっているのですが、現在作成中のプログラムの中で
cvCalcHist
cvCalcBackProject
cvSplit
cvInRanges
を呼び出すと、呼び出す順番に関わらずcv::Exceptionを投げてきてプログラムが終了してしまいます。
openCVの以前のバージョンで試してみたりもしたんですが、解決することが出来ませんでした。
試しに、これらの関数をコンストラクタや別の処理の中で実験的に呼び出してみても、それぞれの箇所で同様にアクセス例外を投げてきましたので、
処理の流れ自体に問題があるとは考えにくいです。
解決策としてはどのような方法が考えられますか?知恵をお貸しください。
残念ながら一気にかいけつは出来ないよ。
一つ一つ関数の呼び出し引数の確認と原因絞りこみが必要。今貴方がわかっている現象だけじゃエスパーできないっす
>>956 Debug コンパイルなのにリリース用のライブラリをリンクしてる,
もしくはその逆.
とか?
>>956 もしかしてマルチスレッドとマルチスレッドDLL併用してる?
蝶本にSurf が乗ってない。せっかく買ったのに
蜘蛛は目に映ったピンぼけ映像で獲物の距離を掴んでいるらしい。
単眼での物体距離認識libraryは作れるのかな
OpenCV 2.3.1+MinGWで以下のような問題にぶつかりました。
解決策についてアドバイスをお願いします。
■現象
cv::imshow()で画像を表示しようとするとプログラムが落ちる
■環境
・Windows 7 32bit
・OpenCV 2.3.1
・MinGW 20111118 (gcc 4.6.1, g++ 4.6.1)
・CMake 2.8.6
■インストール方法
1. MinGWのインストーラ(mingw-get-inst-20111118.exe)から C Compiler, C++ Compiler,
MSYS Basic System, MinGW Developer ToolKit をインストール (インストールフォルダは C:\MinGW)
2. C:\MinGW\bin にパスを通す
3. OpenCV-2.3.1-win-superpack.exe を取ってきて展開
4. cmake-gui で Configure → MinGW Makefiles を選択、コンパイラは1.で入れた gcc, g++ を
設定して Configure → Generate (インストールフォルダはC:\opencv, オプションはデフォルトのまま)
5. コマンドプロンプトで mingw32-make, mingw32-make install してインストール
6. C:\opencv\install\bin 以下にあるファイル(*.dll, *.exe)をパスが通ってるフォルダに全部コピー
■コンパイル・実行
コマンドプロンプトから
http://tinypaste.com/011cb45a をコンパイルして実行
$ g++ foo.cpp -o foo.exe -IC:\opencv\install\include -LC:\opencv\install\lib -lopencv_core231 -lopencv_highgui231
$ foo.exe
実行すると hoge, fuga までが表示され、タイトルバーが「Test」のウィンドウが表示される(背景はグレーっぽい色)。
直後に「foo.exeは動作を停止しました この問題の解決策を確認しています...」というメッセージが表示され、プログラムが終了する。
-lでOpenCVのライブラリ全部設定したりMSYSからコンパイルしたりも試したけど結果は同じでした。
GUIを使わないこんなの
http://tinypaste.com/d901ce69 だと普通に動くんですが…。
>>962 "Test"っていうWindowsがnamedWindowされてないからでは
>>961 片目瞑っても大体の距離はわかるから、不可能では無いと思う
実際にやろうとすると、模様や影からパターンで推測になるだろうから、膨大な計算量になりそうだけども
>>961 クモがやっている方式は
安物のカメラで使われているのオートフォーカス(コントラスト方式)とどのような違いがあるの?
961が言ってるのはピンぼけ具合から距離を求めるってことじゃないの?
967 :
966:2012/01/31(火) 20:56:09.98
logicoolの焦点変えられるカメラでコンストラストが最大になる焦点距離を
ピクセルごとに記録して距離画像っぽいの作成したことはある。
Halconにそんなのが紹介してあったので真似してみた。焦点距離計測とかなんとかいうやつ。
969 :
962:2012/01/31(火) 22:45:05.79
>>961 前ピンと後ピンでは厳密にはボケ方が違うから、それを認識できれば
単眼で距離を測ることは可能だと思うよ。
ただ、絞りの形が決まってないと難しいと思う。
>>968 それが昔からあるコントラスト方式のAFそのものであることは分かる。
クモの研究者は、新しい距離計測技術につながると主張しているので、
なんらかの違いがあると思うのだが、それが分からん。
いつもCの
IplImage *pImg = cvCreateImage(...)
使ってて
C++のインタフェースって使ったことないんだけど
画像のチャンネル数は指定しなくてもよいの?
(例えば CV_8U → CV_8UC1 としなきゃダメとか)
違うPC環境で実行すると動画ファイルの読み込みが上下逆になったりするのは何故ですか?
あと、USBメモリの中では正常なのに、動画ファイルごとHDDにコピーして実行すると上下逆になります
USBメモリの方ももう一回実行しなおしたら上下逆になりました・・・
つまり1.0と1.1preだと読み込みが変わるんですね
2.3.1 を使っているのですがCvPointやCvRectは
struct CvPoint;
のように前方宣言(で言葉合ってるかな?)できるのですが
CvSizeだけ何故かtypes_c.h内で無名structのtypedefとして宣言されているために
struct CvSize;
のように前方宣言が書けません.
このような場合は あきらめてヘッダをincludeするしかないのでしょうか?
今時1.0や1.1pre使って悩んでるハゲがたまに出てくるけど一体なんなの?最新版使うと死ぬの?
研究で使ってるから環境変えるとめんどい
環境ごとにバーチャルPC用意するだろふつう
なら自分でソースコード見て直せば〜
1.0や1.1は捨てちゃえば良いのに
と、2.1を使い続けてる俺が言ってみる