【Intel】OpenCV総合スレ 5画素目【画像処理】
レス数が1000を超えています。これ以上書き込みはできません。
OpenCVはインテルが公開したオープンソースのコンピュータービジョンライブラリ。
現在はWillowGateが開発している。
本家
http://opencv.willowgarage.com/wiki/
日本語資料など
http://opencv.jp/
前
【Intel】OpenCV総合スレ 4画素目【画像処理】
http://toro.2ch.net/test/read.cgi/tech/1329040627/ OpenCV 2.4以降でMatと配列を相互変換したい。
Matは幅w、高さhのCV_32FC3型。
配列はw*h*3のfloat型3次元配列。
for文を使わずシンプルに書きたいんだけど、
いい方法ないかな? ノ ゚.ノヽ , /} ...
,,イ`" 、-' `;_' ' ..::::::::::::::...
,-、 _.._ ( (,(~ヽ'~ ..:::::::::::::::::::::::
)'~ レー' 〉 ヽ i`'} .:::::::::::::::::::::::
~つ '-ー、 i | i' ...:::::::::::::::::::::::
/ < / 。/ ! ......::::::::::::::::::::::::: これは>>1乙じゃなくて
/ ~^´ /},-'' ,●::::::::::::::::::::::::::::::::::::
i、 ,i' _,,...,-‐-、/ i :::::::: .:::::::::::::
..ゝ <,,-==、 ,,-,/ .::::::::::: 放射能がうんたら
) {~''~>`v-''`ー゙`'~ ..::::::::: ........::.
{ レ_ノ ..::::::::. ......:::::::::
ノ '' ..::::::: ...::.:...:::::::::
.::::::::: ...:......:::::::::::: .
.:::::::::::. ..... .. ..:::::::::::::::::::::::: :::.
::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. :: ::..
.:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::: ::.
::::::::::::::::: :::::::::::::::::::::::::::::: :::::
.:: ::. ::: 916 57 [sage] 2013/10/25(金) 21:38:54.52 ID: Be:
openCV触ってみたが、cで扱った時よりか大分楽だな。
インストールからして凄く楽々
開発も楽々
ちっくら、惚れた 一般人なら英語を読めて当然とは思わないけど、プログラマなら当然でしょ。
これだけ日進月歩の激しい分野でどこかの誰かの翻訳待ちとか頭悪すぎる。 プログラマは頭なんてよくないよ
一種のサバン症候群だから日本語は苦手 英語ならまだいいがnginxとか最初ロシア語でしたし 中身は C だからな
下手なループとかを Python 側で書いてしまわなければ桶 冗談抜きでプログラムさくさく書けるひと尊敬するわ
コミュ障が多いけど 最近ずいぶん熱心にマルチポストしてるようだけど
医者に罹る気はないかい? WebGL がサクサク動く時代だからな
WebCV.js があっても驚かない自信はある 実行時最適化のおかげで行列が速い速い
ES6からSIMDも入るしJSで書けば一足先に未来へ行ける 極一部のレアケース除いてJSがC/C++より速いわけねーだろ・・・。
と思ったけどJSと比べられてるのは文脈的にPythonか?それならそうだろうな。 ひょっとしてブラウザじゃなくて
node.jsみたいなの想像したけど
>>27
に先越された そうでもない
JSの実行速度はかなり速い
ブラウザのおまけだった時代と違う
今や速度ではアセンブラがライバル
昔のイメージで見ると時代に乗り遅れる Intel自身がOpenCVを書く言語を誤ったと認めているからね。
大量のデータに小さな命令を適用するにはVM方式のほうが速度面で有利らしい。 速度の話は門外漢だから触れないけど
ライブラリをC/C++で書くというのは、大抵の言語に存在するFFIを利用できることに他ならない
いちいちポーティングしなくても使用できる点において絶対的に優位だと思う
VMだとそうはいかないだろう 実行時最適化って言葉を使いたいお年頃なのかな?ボク? 技術板である以上、JSのほうが速いとわかったらJSで書き直す有志が
出てくると思う
OpenCVの倍以上速くなる この板ってのはさすがにないw
この板で生み出されたものがまずないもんw ライブラリが使用されるには実装に加えて保守が必要だからねー
JSでしか使えないライブラリでそんな人足が集まるだろうか? 形になったら寄贈すればいいんだよ
GoogleとかApacheに 言われて見るとム板発ってないな。
いい機会だからやってみたらいいんじゃね。 ES7からexport入るし他の言語から呼び出される側になるだろうね
ライブラリは高速性を生かしてJSで書き
アプリは環境固有のネイティブで書く Javascript製のOSが出てきているのでJavascriptがネイティブ言語になる可能性もある
Javascriptはシステム記述言語としても成熟してきた >>38
せっかく作っても叩く香具師ばっかだからな >>39
思ったよりたくさんあるな
ttps://npmjs.org/search?q=openCV オライリーのopencv第2版が出るらしいけど
2.x系の説明は追加されるのかなぁ。 ちくしょう買ったばかりなのに;;
まー追加分はwikiとか見てるけどさ・・・ Mac のPythonでOpenCVを使いたいと思い
ttp://slowquery.hatenablog.com/entry/2013/06/09/121420
を参考にHomebrewでインストールしました。
このサイトに乗っているデモをダウンロードして実行したのですが
running: color_histogram.py
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /tmp/opencv-YuGx/opencv-2.4.6.1/modules/highgui/src/window.cpp, line 261
Traceback (most recent call last):
File "color_histogram.py", line 38, in <module>
cv2.imshow('camera', frame)
cv2.error: /tmp/opencv-YuGx/opencv-2.4.6.1/modules/highgui/src/window.cpp:261: error: (-215) size.width>0 && size.height>0 in function imshow
Cleaned up camera.
と出てしまいます。なにがおかしいのでしょうか? Officeなどにゼロデイ脆弱性、Word用いた標的型攻撃も観測
米マイクロソフトは2013年11月5日、Microsoft Officeなどに未修正の脆弱性
(CVE-2013-3906)が存在することを明らかにし、注意を呼び掛けた。
http://www.atmarkit.co.jp/ait/articles/1311/06/news105.html
(前略)
脆弱性が存在するのは、Windows Vista、Windows Server 2008、
Microsoft Office 2003〜2010とMicrosoft Lync。
Microsoft Graphics ComponentのTIFF形式の画像処理に問題があり、
細工を施したTIFF画像を開くと、攻撃者に権限を奪取され、リモートからコードを実行されてしまう恐れがある。
(後略) OpenCVに梱包されている目の検出器で検出された領域というのは、
どのくらい確からしいものなんだろう。
領域内のある程度決まった場所に目頭とか目尻って出てくるんだろうか。 >>53
そこまでこだわるんならAAMとか使った方が良いんじゃない? opencvを用いて部分的にSURFを抽出する処理を書いています。
ですが、全体に対してSURF抽出をした場合と、部分的にした場合とでは
SURFの出力が異なってしまうのですが、原因がわかりません
以下画像です。
ちなみに2枚目の画像は、マスク画像で、これを使って部分的にSURF抽出してます。
http://uploda.cc/img/img527df9a52daa5.png
http://uploda.cc/img/img527dfa737a888.png >>55
"SURFの出力"を詳しく知りたい。
取れるkeypointが異なるのか、取れたkeypointの特徴量が異なるのか、マッチングの結果が異なるのか。 >>56
とれるキーポイントの場所が異なる。
具体的には、>>55の一枚目の画像で、右側の画像ではイルカの上側付近に特徴点が
抽出されてるのに対して、左側の画像ではその部分に特徴点が無いんです。
部分的にSURF抽出すると
画像の黒いエッジ付近にやや、特徴点が抽出されてしまっているのをどうにかしたい。
この部分はマスクで処理しているので、決して画素値0として処理しているわけではないです。 >>57
塗りつぶすのがいかんのじゃない?
塗りつぶすんじゃなくてちゃんとカットしたのと比べてみた? 質問です。opencvsamples\cpp\peopledetect.cppのHOGの人認識プログラムの処理速度を改善する方法はありますか
動画中の人物を認識しようとしているのですが、自分の試した限りでは最速でも1フレームあたり0.7秒程度かかってしまいまいます
これをなんとか1フレームあたり0.2〜0.3秒で処理したいのです
もし難しいようであれば他の手法やライブラリを紹介していただけるとありがたいです。高額でなければ有料のものでも構いません 基本的に画像処理の速度というのは精度とトレードオフだから CUDA環境入れてgpu::HOGDescriptorを使う。 >>57
マスクに関しては0として計算してしまう仕様なんだろうね。keypointの場所に関しては今のところわからない…
その場しのぎの手段だけど、左図でdetectionした後に各keypointの座標とマスクを参照して切る処理を自作するとか。 質問です。
cv:Matを用いて1ch 3次元のヒストグラムを操作する処理を作成しているのですが現在配列へのアクセスにてこずっています。
Matにおける3次元配列へのアクセス方法を教えて頂けないでしょうか?
初歩的な質問だと思いますがよろしくお願い致します。 >>65
cv::Matは宣言の仕方でアクセス法が少し違うのでコードを貼ってもらえると話が早いです。 オライリーの詳解opencv買っちまったから
IplImageとかのほうでいまだにやってるわ。 IplImageに毎回変換するの面倒とか思ってたら
気がついたら動画の読み込みと作成だけOpenCVにやらせて、
画像処理は自力になった OpenCV 2.4.7 でたね。
次の 2.4.8 はいまのところバグ修正が9件あるだけ。 Mat_の方が画素アクセスとかtemplateで関数宣言するのも楽じゃない? シーケンスの要素を削除するときのエラーについて質問します
あるシーケンスA(CvSeq *A)の
総数(A->total)が500個でした。
そこで
for(i=0;i<300;i++){
cvSeqRemove(A,i)
}
をすると、i<300では大丈夫なのですが、iを350あたりより大きくすると
エラーがおきます。
シーケンスの数は500なのに、なぜ350個以上削除するとエラーが起きるのでしょうか?? >>75
なるほど、削除すると同時に前へずれていくのを忘れてました。 以下の4行目のように一度シーケンスに格納したあと、
すぐにそのシーケンスから中身を取り出して ->size の値をを調べてみると
まったく違う値になります。どうしてですか・・・
正常値は10~30なんですが、取り出した後は22430958309(整数)というありえない数値になってます
CvSURFPoint *pp1=(CvSURFPoint*)cvGetSeqElem(keypoints1,i);
cout<<pp1->size<<endl;//ここは正常値
cvSeqInsert(new_keypoints,new_keypoints->total,pp1);
CvSURFPoint *SURFP=(CvSURFPoint*)cvGetSeqElem(new_keypoints,new_keypoints->total-1);
cout<<SURFP->size<<endl; bgfg_segmのサンプルをビルドして実行してみたんだけども、何も設定した覚えがないのにブレークポイントが発生して最後まで動かない...。どうしてかわかる??やっぱりサンプルのコードにバグがあるのかな...。 segmってくらいだからセグメンテーションフォールトでしょう(断言) 前に3次元配列へのアクセスについて質問させて頂いた者です。
自主解決出来ました!
3次元用のatが定義されてたんですね。
反応してくださった方ありがとうございました! 初心者です
opencv2.4.6を使っているんですが、以前使えていたcvAndの機能はcvクラスではどんな使い方(cv::?)にすれば良いのでしょうか?
リファレンスを見つけたのですが分からなくて……
よろしくお願いします CvMatとMatのことで悩んでおります。
以下のCvMat型の表記をMat型に直すにはどうすればよいのでしょうか。
ご存知の方いらっしゃったらご教授下さい。
CvMat *cvMat;
CV_MAT_ELEM(*cvMat, int, x, y) = value; 83です。
mat.at<int>(j,cur) = (int)val;
にて書き換えが出来たと思ったのですが、matの中身を参照したところ
浮動小数点で表示されてしまいます。
調べたところcreateが以下のようになっており
mat.create( X,Y, CV_32FC1);
3番めの引数をCV_8UC4等に変えてみたのですが、
そうするとmatが正しく初期化されていないとエラーが出てしまいます。
対策方法有りましたらご教授お願いします。 何をやりたいか整理して話してください。
・使いたい型はuchar?float?
・チャンネル数は1?4?
・書き込みたい値の型はint?
いろいろ混ざりすぎて何やりたいかさっぱり 83です、申し訳ございません、整理させていただきます。
あるテキストファイルから1箇所ずつint型で数値を抜き出して
Mat型に格納したいです。Matに格納後、中身を確認したところ、
整数値ではなく浮動小数点で全く違う値が示されてしまいます。
0〜255の数値を「,」で区切った、
32行×500列の以下の様なテキストファイルが有ります。
2, 32, 255, ・・・(32行)
・
このテキストファイルから1箇所(,で区切られた数値)ずつ抜き出して
int型にして下記のようにmatに代入していきます。
mat.at<int>(x,y) = (int)val; //valは正常な数値を示しています。 そしてその後 以下のようにして中身を表示します。
for (int i = 0; i < mat.rows; i++) {
Mat d(mat, Rect(0,i,mat.cols,1));
cout << d<< endl;
}
しかし、ここで [2.8025969e-045, 4.4841551e-044, ・・
のように浮動小数点で全く違う値が表記されてしまいます。
正確に表示させられるようにするにはどうすればよろしいでしょうか。 >>87
よく分かってないけど、mat.at<int>って、doubleとintの間で数値を変換してるわけじゃなくて、
ポインタのキャストみたいに本来doubleの所に無理やりintの値を書き込んでるのでは? >>82
すいません、よく見たら2.4.3のリファレンスでした >>89
返信ありがとうございます。そのようですね…
Mat_ <int> で宣言することでintを扱うことが出来ました。
皆様有り難うございました。 http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html
質問です。このページのSurfの特徴検出・抽出器をORBに変更しようとしたのですがうまくいきません
変更箇所は2つで
SurfFeatureDetector detector( minHessian );から
OrbFeatureDetector detector( minHessian );と
SurfDescriptorExtractor extractor;から
OrbDescriptorExtractor extractor;です
探索方法は変更せずflannのままで行いたいです。お願いします >>94
詳しくは調べてないけど、flannのmatcherだとorbやfreakで落ちる。freakのサンプルみたいにBF matcherではいかんの? >>95
大量の画像とマッチングする予定なので「力づく」の探索はどうにも・・・
http://opencv.jp/opencv2-x-tips/changelog_from_22
ここにある「BRIEF と ORB 局所特徴量に対する,非常に高速な LSH matcher」がflannだと思っていましたので
新たに検索してみたところ
http://opencv-users.1802565.n2.nabble.com/how-to-use-the-ORB-descriptor-td6606424.html
このページがそれに該当するようなのでもう少し見てみます
お騒がせして申し訳ありませんでした 画像処理の論文は理想的な画像でやってるのばっかだから たくさんの画像セットで実験してみて一番良い結果が出るものを載せます kinectと組み合わせてプログラム書いてんだけど
CV_16UC1のcv::Matのdataにushort型の値を代入しようとしたらucharにキャストされる。
16UC1でメモリ確保してるんだしなにかうまい代入方法ってない? >>100
.dataでアクセスしたら相変わらずucharじゃねえかって思ったら()でアクセスできるのか。
dクス static_cast<ushort *>(mat.data)[i]とかじゃない?
dataって一応uchar *の型が指定してあるだけの単なるポインタだよね。 すまん間違えた、static_castじゃなくてreinterpret_castだった。 SIFTを組んでいるのですがコンパイルはできても実行すると実行停止してしまいます。
どうやらキーポイントの数(配列の要素数)が6億個もでてることが原因っぽいです。
なにか解決方法はありますか?
一応主なソースは↓です
cv::SiftFeatureDetector detector(0.04,10.0);
cv::SiftDescriptorExtractor extractor;
cv::Mat descriptors1;
extractor.compute(grayImage1, keypoints1, descriptors1);
環境はvs2010、opencv2.2です。 入力画像の先鋭度を測るプログラムはOpenCVで作れますか? >>105
すみません自己解決しました。
どうやらリンカの設定が甘かったようです。
ありがとございました。 traincascadeから出力したxmlは、haartrainingから出力したxmlと中身というか書式が違いますよね? OpenCV 2.4以上、VS2010でOpenEXR対応の
64bitビルドを行いたいのですが、必要な
ライブラリとか手順とかの情報ってどこかに
まとまっていないでしょうか?
そもそも、このような構成でのビルドは可能ですか?
OpenCV単体のビルドは何度かやっているのですが、
外部ライブラリとの連携は未経験です。 画像を回転させると角が切れちゃうんですが、バグですか? 昔からあるバグだな諦めろ
今時、opencvなんて使うのはダサイ 額縁の中で絵を回転させたら角っこがはみ出るのと同じ。
額縁の大きさ(画像サイズ)を変えないと。 115殿には是非今一番アツいCVライブラリを
御教示頂きたいものだ。
もっとも、OpenCVが何かと難有なのは同感だし、
結局選択肢がないからこれ使ってるってCV技術者が
大半なんだろうな。
IOさえ何とかなれば、その他の演算処理は
自前で組んだ方がややこしいドキュメントを
隅から隅まで読むのより早かったりするし。 リンクスのHalconとかいいらしいよ
でもこれ個人で気軽に買える類のものじゃないね
どこで売ってるのかわからないし、値段も公開されてない
MatlabとかもそうだけどAmazonとかで気軽に買えるようにしてほしい おまえらは人が作ったライブラリがなきゃなにも作れねーのかよw OpenCVをC++から使ってクソ使いにくいって思ってる人は
Pythonから使ってみるといいよ、ダメダメな設計のcv::Matじゃなくて
Numpyで多次元配列扱えるから遥かに使いやすい
速度は多少残念なことになるけど
未だにIplimage使ってる人は絶滅して 車輪の再発明だらけになって
どこの誰が書いたのか分からない糞コードが氾濫するような世界は嫌だよ
定番のライブラリがあったほうが絶対いい >>117
Halconは職場で使ってるけど、オープンじゃないのがね。
>>119
俺は99%Pythonからしか叩かないわ。
実行速度は課題だけど、C++特有のストレスから
解放されるだけでも十分使う価値あると思っている。 OpenCV3.0から公式でC#対応だからそれ待とう cv::imreadで画像を読み込む場合、その画像が
カラーテーブルを持っているかどうかはどうやって判断するんですか?
気にせず読み込めますが、グレースケールの画像を読み込んだのに
グレースケールボタンが押せるのはおかしいので・・・ Halconなんて工業製品のパターンマッチングとかで使われる高価なパッケージでしょ
そりゃフリーなら喜んで使うけどOpenCVスレで何言ってんの?って感じ >>124
cv::Matのチャンネル数見るとかかな?
チャンネル数1ならグレースケール画像
チャンネル数3ならカラー画像 最近は画像の入出力にしか使ってないや
読み込んだあとはEigenに変換してる Python版はNumpyに放り投げてるわけだし
C++版もcv::Matとかクソ扱いにくい仕様やめて
Eigenに放り投げるよう再設計すべきだよね、常々思うわ 内部でEigen使ってなかったか
確かコンパイルに必要だったような 確かにEigenは必須ライブラリだったはずだけど、
cv::Matは画素アクセスとか面倒だよね。
2月にはOpenCV3.0出るって言ってるけど、
使いやすくなってるのかな。 どんな言語もフレームワークの善し悪しで流行る・流行らないが決まっちゃうほどだし
やっぱライブラリの使用が如何に簡潔で解り易いかってとても重要だと思うなー
逆にプロプライエタリなフレームワークが使い易かったことって一度もないけど 画素アクセスをsrc(y,x,ch)みたいな仕様にしなかったのは何でだろうね Python版はその仕様だよ、みんなC++やJavaみたいなクソ言語は捨ててPythonを始めよう pythonは一度も触ったことないんだけど、MATLABみたいな感じ?OpenCVの関数は基本的に全部移植されてるの? 俺もPython良く知らないんだが
Pythonの新しい企画には対応してないとかなかったっけ? OpenCVがpython3に対応したら、おれもpythonの勉強するんだ... >>136
基本的な機能は抑えてるけど新機能は対応してないことも多々あるね
例えばこのあいだの動画の超解像とか
個人的にはヘタするとMatlabより使いやすい
>>137
Python3には対応してないけど対応する予定はあるらしい
互換性はないけどPython2でも3でもたいして変わらない IplImage *pImg = cvCreateImage( ... );
{ cv::Mat M( pImg ); }
これって画像は破棄されるの? されないの? JavaScriptは3日で覚えたけど(jqueryは使ってない)PythonもLLだからそのくらいで習得できるかな? JavaScriptを本当に3日でマスターしたならPythonなんて半日だ visualstudio2013にopencv.netを導入したのですが
CreateImageのようにサイズを指定して画像を作成するにはどのようにすれば良いですか?
OpenCV.Net.CV.CreateImageを実行したいのですができませんでした. マッチテンプレートでOCRを行いたいと考えています
文字列と同じように空白もマッチングしたいのですが、空白を与えても上手く検出できません
なにかよい方法はありませんか? 空白以外が検出できているなら文字間隔から空白があるか予測して補間すればええやろ 同じ細胞から作ったコピー細胞なら画像似てても仕方ない気がするが 簡単に技術盗まれないように
肝心な部分はぼかしてるんだよ パンチルトカメラで顔を追いかけるプログラムって
どこかで公開してないでしょうか 顔の座標とれるんだったら
一定時間でとり続けて差分でどっち動いたか判断してそっちにカメラ動かすだけだろボケが
自分でやれよ。 >>151-152
IPカメラのIPアドレス指定してCvCaptureに動画をとりこむことは出来るけど
パンチルトカメラの首を動かす方法がカメラの種類によってコマンドが違うみたい
カメラの首を動かす方法はどうやって調べたらいいのでしょうか
http://robocv.blogspot.jp/2012/01/using-your-ip-camera-with-opencv.html
perl cgiでコントロールできるモジュールが
あるみたいな記述があちこちのサイトにあるけど
その肝心のソースコードがどこさがしてもない 共通規格があるわけでもなし当たり前のような気がする OpenCV初心者です
現在OpenCV2.4.7を使用しています
かなり基礎的な質問で申し訳ありませんが、2.4.7内の関数の使い方を全部掲載しているサイトなどはありますか? 読めたらこんな肥溜めで聞かないっすよハハハご冗談を 英語は読めます
学生で、部活内で使われているものが2.4.7です
2.4.7でなくともそれに近いものであれば構いません
教えていただけると幸いです
よろしくお願いします 公式→ http://docs.opencv.org/2.4.7/
まぁ本当に全部っていうとソース読めってなるんだけど OpenCVのプログラムコードの一部だけ論文に転載するのって
著作権的にはOpenCVへのリファレンス書いてたら問題ないの? このスライドでOpenCVでのおっぱい検出を紹介してる
http://www.slideshare.net/yusukebe/oppaidetect-3
おっぱい画像の代わりに手画像を使えばよし WindowsでMinGW版無くなっちゃったのか。
VC版はやたら充実してるけど。 画質良いの定義が難しいからなー
画像によって処理が合ってるかも変わるだろうし
自分でやってみて拡大してみるのが一番いいんじゃね >>171
サンプルプログラム
opencv-2.4.8.2/samples/gpu/super_resolution.cpp
がコマンドラインから超解像動画を自動生成できるみたいなのですが
1分ぐらいの動画でも一晩ずっと動かしてもとまらなくて
生成した途中結果表示みてみると
最後まで行った後、まさ最初に戻って何度も同じ動画を処理してるみたいです
バグでしょうか?
main内のforループも終了条件ないですし 動画の補完限定なん?
静止画数枚でテスト出来ないんかな >>175
>静止画数枚
の例らしきものも同じディレクトリにあった 暗い部分だけ選んで明るくするというの
http://aska-sg.net/psegogo/pse007-20051207.html
Photshopでは出来るみたいだけど
OpenCVにはそういう関数ないの?
あとインターレスのノイズも消したい
vReavalという超解像のソフトがなくなってしまって
それが持ってる機能が欲しい Javaで画像処理をしたいと思い、勉強してます。
JavaCVではなく、OpenCVのJavaライブラリを使ったプログラムを
勉強できるサイトなどありましたらご紹介いただけないでしょうか?
書籍は「Javaで始めるOpenCVプログラミング」を読んでいます。 OpenCVのPythonインターフェイスが
次々と出来ては消えて行くのは
何故? C#でOpenCVSharpのBitmapConverterってどうやって使うんですか?
名前空間OpenCvSharpには存在しませんでした
環境はVS2013でパッケージはNuGetを使ってOpenCvSharp x64を使ってます 画像認識に興味があり、OpenCVを勉強し始めました。
カメラ撮影したものから長方形の物体を検出し、射影変換することで、
長方形の物体を正面から見たときの画像を得たいと思っております。
元の長方形の縦横比が既知である場合はcvFindHomographyにて射影変換行列を得ることができました。
しかし、元の長方形の縦横比が既知ではない場合、つまり射影変換前の長方形から縦横比を求める方法が思いつきませんでした。
カメラで斜めから撮影した長方形の物体の縦横比を求める方法が知りたいです。
どうかよろしくお願いします。 ピンホールカメラモデルを考えて式を立てればどういう計算で縦横比が求まるかと、どこまで条件を揃えてないといけないかがわかると思うけど、
そのための関数ってのは特にないんじゃないかな。
長方形の縦横比、カメラの回転並進で合わせて7つの自由度があるから、少なくともカメラの内部カメラパラメータがわかってれば
長方形の4点が認識できれば8つの拘束条件ができるから計算はできそうな気がする。 >>182
OpenCvSharpからOpenCvSharp.Extensionsに移ったみたいなので、
using OpenCvSharp.Extensions;
をソースに追加。 >183
画像上での4頂点に対応するカメラ座標系でのレイ(無限直線) と ある平面 との交点を求めたときに
その4交点が長方形になってるような平面を求めればいいんだろうきっと.
4つの交点を結んだ四角形の四つ角が90度にならなければいかんぜよ という条件とかから
適当に目的関数でも立てて最小二乗法とかでやればいいんじゃないか?
なんとなくだが平面が通る点をどこかに適当に定めてしまって
平面の法線方向だけについて解けばいいような気がする まだこの話題続いてたんか。
つい最近トラ技だかInterfaceだかで車のナンバープレートを
矩形化する記事があったが、あれも確か縦横比使わないで
画像解析だけで何とかしてたはず。 >>187
>>184だけど確かにその方法でいけるね。
最小二乗法を使うまでもなく代数的に解けるようなレベルのような気がする。
4点がそれぞれp1,p2,p3,p4だったら、レイ上のどこに来るかっていう適当なスケールパラメータs1,s2,s3,s4を考えて、
あとはs2p2-s1p1とs4p4-s1p1の内積が0かつs2p2-s3p3とs4p4-s3p3の内積が0になるようなs1〜s4が求まればおしまいだから、
4元2次の連立方程式かな? OSXでopencv2.4.9を自前ビルド、静的リンクしてc++プロジェクトで使ってます。
highguiの関数 cvShowWindow()を使おうとするとリンク時にcocoaの関数まで静的リンクしよう
として symbol not foundエラーになり、ビルド出来ません。
全体を動的リンクにしてやり直すしかないのでしょうか 初心者名質問で申し訳
IPカメラの画像(h ttp://192.168.x.y/snapshot.cgi)をopenCVで処理することって出来ないの?
画面キャプチャとかハードウェア改造とかじゃなくて。あよ、筐体開けてもシリアルの口は見当たらなかった。
カメラの初期化が出来ない司やり方も分からなくて困ってる
カメラはELECOMのLAN-NCW150/sという代物
EdimaxのOEMらしい >>192
できるよcv::VideoCaptureにurl食わせてやればいいだけ すまん勘違いした動画じゃなく画像か
>>193の言うとおりだった
とにかくBitmapで取得して変換すればよい OS XのCocoaでOpneCVが使いたいんですがStackOverFlowなど読んでもCommand Line Toolが前提っぽいんですがGUIで利用できないんでしょうか
こういう開発環境や導入見ても如何にWin+VSが優れてるかわかりますよね、Mac本当に面倒くさい・・・ >如何にWin+VSが優れてるかわかりますよね
>如何にWin+VSが優れてるかわかりますよね
>如何にWin+VSが優れてるかわかりますよね
あのさ、心の底から教えて欲しいと思ってるなら
こういう物言いすべきじゃないぜ?
VSコンパイラのタコ仕様に振り回されてる開発者も
世間にはごまんといる。
おまけにちょっとググったらすぐ情報見つかった。
もう少しきちんと探してみることだな。 煽ったら何か出て来るだろうっていういつものことだな
自演でなければ Mac が面倒なのは同意
Mac 使ってるひとの理由の大半はタダの Linux で充分なことを求めてる Xcodeで使うのはWin+VSで使うのとそんなに変わらないんうじゃないの? そもそもサポート対象じゃないライブラリを無理矢理動かして使えないからダメって
そりゃそうだとしか言えんはw It has C++, C, Python, Java and MATLAB interfaces and supports Windows, Linux, Android and Mac OS. >>196 がタコなだけ。XCode経由で開発可能。 Windows版と違って公式にビルド済みのバイナリが置いてないから使えねえって言ってるのかな。 とっくに対応してる。
CV系の学生はMacユーザ多い。 CV系の学生って何ぞ?w
自分で計算出来ないからライブラリにやってもらって
自分は何もわかりませんとか? あー言っちゃったね
マカーのプライド傷つけるとどうなるか、身を持って知るといいよ 最近は、GLSL触るだけで画像処理の専門家なんだそうで、
SPIDERもOpenCVも何それな専門家が増えているからなぁ >>211
ま、別にライブラリ使ってもいいんじやない?
巨人の肩に乗ってる事を忘れなければ。 OpenCVに限らないが、入出力のような本質から外れる部分はライブラリを使ってどんどんすっ飛ばせばいいよ opencvのSIFTを利用してCSIFTのプログラムを作成したいのですが、このアルゴリズムの詳細がわかる方いますかね? Windows版に慣れてからMacに移植した方が覚えやすくね? 御託を並べて抵抗するな
はやくアップルストアに行け Mac版のメリットってあるの?
Windows版の方が情報多くて楽だろ だいたい、自分の環境でのビルド方法なんかcvに手出す前に
身につけて置くべきもので、
WinがMacがと取り立てて騒ぐ事かと。 ある凸多角形に収まる最大の円の大きさを求める関数ってないだろうか 質問失礼します。
入力画像が、複数あるテンプレート画像の中のどの画像と最もマッチングしているかをSURFを使って調べるにはどうしたらよいでしょうか。
最近openCVを使いはじめましたが、プログラミング自体初心者であるため、調べ方もよくわかりませんでした。
よろしくお願いします。 >>229
正の場合、重心求めて任意辺の中心との距離で求まるかと
思っていたけど間違っている? >>231
解無しを簡単に排除する方法が思い浮かばない。ので
聞いたのだが? 数値解法でいいなら単なる最適化問題だからそんなに難しくないんじゃない?
解析的に求まるかはわかんないけど、円に接触しない辺が出てくるし難しそう
解なしの場合なんてある? それって画像で考えると
凸多角形の輪郭線からの距離画像を作ったときに最大値になる点が求まればいいってことだよね?
じゃあ それを解析的にやるとしたら… どうすりゃいいんだ?
図形の輪郭を徐々に小さくしてくことを考えると
各頂点は角の2等分線の方向に縮んでいくような気がするが
どこか(別の2等分線との交点?)で別の頂点と合体してその後は縮んでく方向が変わる
その合体後の方向ってのがどうなってんのかわかればそれを最後までやって
一点になる位置を求めればいいのか うん,わからん >>236のを読んでて思ったけど、
凸多角形のそれぞれの辺を内側に向かって同じだけ並行移動させつづけると、どこかで内側のエリアが3角型になるか、線分になるか1点になって、
3角型の場合はその3角型の内接円の半径に辺の移動距離を足したものが内接円の半径になりそうな気がする。
線分になる場合や1点になる場合は辺の移動距離が半径になりそう。
解析的には解けるけど方程式一発という訳にはいかなくて判定処理が必要そうだね。
辺を平行移動させるとどこかで辺が消えるけど、その条件も解析的に求まりそうな気がするから今一歩というところだね。 n角型だとして、隣り合った2辺のなす内角を2等分する線を引くと、その線交点がn個できる。
この交点と辺の距離の分だけ辺を移動させたときに辺が消えてn-1角型になる可能性が出てくるから、辺からの距離が小さい交点から順に処理してやって、
3角型になるまでやればいいわけだから…
ああそうか、交点と辺の距離を計算してn-3個目に小さい距離がn角型を3角型にする辺の移動距離だから、そのときに出来る3角型を求めれば最大の内接円が求まるね。 >>242
四角形の場合、辺の長さをAからDとした時 A+C=B+Dなら
解あり。そごうのマークはこの条件を満たしているが線分が
交錯しているので解無し。 どうでもいいが
>剛体シミュで風船
って矛盾してないか? >>243
A+C=B+Dという判定式はどっから来たんだろう?
A+C!=B+Dでも解が存在する場合はあるし、==でも存在しない場合もあるし。 問題を誤解してコメントしたひとのレスを読んで
さらにそれを誤解してコメントする訳ですね >>251
流し読みだけど定数だからボトルの高さ167mm じゃね >>251
認識した物体(緑のボトル)の実際の高さ >>173
>opencv-2.4.8.2/samples/gpu/super_resolution.cpp
なんだけどCUDAで計算しても全然遅い
CPUで計算する方がはるかに高速
ある程度以上のビデオカードでないとCUDAの恩恵得られないって事なのかな
ちなみにGforce GT420です GT420のCUDAコアは48基
現在のミドル帯で最も普及したであろうGTX660で960基
Titan blackで2880基
無い方がマシかもよ
それ以前にGeforceは倍精度演算コアが以下略なんだが >>255-256
このプログラムは
メモリー1Gのビデオカードだと
デフォルトの設定でCUDAが動かない
画像の拡大サイズをデフォルトの4倍から2倍にしたら動いたけど
メモリー2Gならデフォルト設定で動くのだろうか 2012年ぐらいにビデオカードを複数刺した場合にOpenCVの
CUDA機能がバグってたが、その後に治ったんだそう
http://www.techques.com/question/1-9295350/Error-OpenCV-with-CUDA-using-TBB-for-multiple-GPUs
今なら数千円の安いビデオカードを複数刺して
>>173
>opencv-2.4.8.2/samples/gpu/super_resolution.cpp
のプログラムを高速で動作させることは出来るのでしょうか >>258
データ律速だと、速くならない。
ましてや、安いビデオカードはPCIeバスもメモリも遅いから、なおさら。 その数千円レベルだと数枚挿そうが
CUDAコア少なすぎて無い方がマシ
貧乏人は麦でも食ってろ Linuxでパッケージのアップデートしたら
OpenCVのプログラムに動画を読み込ませようとすると
OpenCV Error: Assertion failed (vc_.isOpened())
というエラーが起きるようになりました
(以前はちゃんと動いてた)
ひょっとしてOpenCVのソースをいじらないと
治らないのでしょうか javascript版OpenCVクル━━━━(゚∀゚)━━━━!! 現在挑戦していることでわからない点があるのでなにかアドバイス頂きたいです。
動画を読み込みハール分類器により顔と目領域を検出します。
次に目輪郭を cvFindContoursで探し、輪郭を検出しcv虹彩に楕円を当てはめようとしているんですが
ビルドは成功しますがソースコードの輪郭を構成する頂点座標を取得
tmp = CV_GET_SEQ_ELEM (CvPoint, contours, -1)の部分でオーバーフローしてしまいます。
またcvHaarDetectObjectsで顔検出では動作しますが目領域の際にエラーがでます。
どなたかこの原因と考えられる対策など教えてください >>266
ヌルポインタが原因のようですがなぜ顔検出では起こらず、
目領域の検出でぬるぽになってしまうのでしょうか? 普通に考えると目を検出する範囲が間違ってるとしか思えんは http://pukulab.blog.fc2.com/blog-entry-41.html
を参考にしてORBを使ってみたら500点までしか特徴量を計算してくれないんですが、上限はどうやったら増やせますか? OpenCV必要ないな。こんな画像認識技術があったってろくな使われ方しないだろうからな。 お前の発想が貧困なだけだろ
休みの日に馬鹿アピールとかなかなか有意義な人生送ってますね
死ねば? OpenCVでROIを用いて画像の一部を矩形で切り抜き、保存することはできたのですが
矩形以外での多角形で切り抜きは可能なのでしょうか? どういう結果を期待してるんだ?
その多角形を包括する矩形で切り出してきてそこから欲しい結果に加工すれば? C++でOpenCVを使っています。
2つのMatを返すメソッドをつくりたいんですけど、どうしたらいいですか? OpenCVに限らないだろうよ
C++の勉強をした時に、2つ以上値を返すにはどうすればいいって習った
それと同じようにやれよ vector<Mat> func(){
vector<Mat> retVal;
retVal.push_back(Mat(640,480,CV_8UC3);
retVal.push_back(Mat(640,480,CV_8UC3);
return retVal;
}
だろやっぱw 引数がレジスタやスタックに積んで複数渡せる仕組みなんだから
戻り値も同様にして複数返せるようにすりゃよかったのにな ご相談に乗っていただきたいです
現在OpenCV2.4.10とDxLibを併用して使っているのですが、findContoursメソッドを使用すると
ヒープが壊れたというランタイムエラーが発生してしまいます
どうにか回避方法を教えていただきたいです
↓ソースです
http://codepad.org/hS14MmrI usbカメラをキャプチャしたものを遅延再生をおこないたいのですが、どうやって行ったら良いのでしょうか? FASTでコーナーだと検出するときの連続画素数の閾値はデフォルトだとどうなっていますか? http://fast-uploader.com/file/6976667806149/
この画像の黒い線の結び目に当たる部分を認識させたいのですが、
どのようなキーワードで学べばいいですか?
分類器などを使用するのが一般的ですか? 本当にこんな画像ばっかりなら、SIFTとかの
画像特徴量で割と行けちゃうかも。 分類器作ることになったんですけどポジティブ画像の識別対象の位置ってやっぱ一個ずつ手作業で打ち込んでいくものなんでしょうか 5次元の行列に添字アクセスするにはどうしたらいいですか?
2次元、4次元はわかるんですが5次元がわかりません... >>292
どうやろうとして、どんな結果になった? >>293
M.at<cv::Vec5d>(i, j, k, l)[m]
とやろうとしましたがそんなメソッドねーよと怒られました 複数の画像からvecファイルを作る、もしくはvecファイルを統合できるソフトをご存じの方いらっしゃいませんか cv:Matって五次元配列作れたんだ、知らんかった。 cv::Mat<cv::Vec5d>は、cv::Matの一つ一つの要素が5次元ベクトルってだけでしょ。
i,j,k,l,mで単一のdoubleにアクセスできるような5次元配列(5階テンソルみたいな?)はMatでは表せないと思うけど。
そもそも掛け算とか定義できないじゃん。
Mat<Vec5d>のデータにアクセスするだけなm.at<Vec5d>(i,j)[4]とかでしょ? >>297
そうなんですか。
ちょっとよくわかってないのですが、4次元の行列操作も根本的に勘違いしてるかも知れません。
とりあえずやりたいことは、4および5次元行列の、
添字(k, l, m,・・・)で指定した要素を読み書きすることだけです。
OpenCVはバージョン2.4.9です。
多次元行列(a.k.a cv::MatND)がcv::Matに統合されたと聞いたのですが、、、 >>298
ごめん。知識が古かった。
https://github.com/Itseez/opencv/blob/master/modules/core/include/opencv2/core/mat.hpp#L1687
Mat::atはヘッダーのこの辺で宣言されてるから、見てみると、
3次元配列まではat<double>(0,1,2)とかでアクセスできるね。
それ以上になると、ポインタかVecっぽいから、
m.at<double>(Vec5i(0,1,2,3.4))とかになるんじゃないかな?
あ、でもVec5iはtypedefされてないから、
typedef Vec<int, 5> Vec5i;
とかする必要あるかも。
2,3,4,6しかtypedefされてないんだな。中途半端w なるほど、at<要素の型>(添字のベクトル)
でアクセスできるわけですね。
ベクトルじゃなくて()内に直接添字を列挙できるのはその特殊な場合(2次元など)
ということですね。
4次元のときにat<要素の型の4次ベクトル>(添字3個)[4個目の添字]
でアクセスできていたのがよくわかりませんが、、、 >>300
あんまりちゃんと追ってるわけじゃないんで正確じゃないけど、一番最後の添字にはそうやってアクセスできるっぽいね。
Mat::at(i,j,k)とMat::ptrの実装を見る限りでは。 カスケードファイルを使って物体認識するところを、
(重いだろうけど)、DeepLearning(DCNN)で認識させる実装やってるんだけど、
ふと既に誰か作ってるんじゃないかと思ってググったんだが、どこにもないな。
誰もが考えそうなものなんだけど、何故だろう。 >303
やられてるんですね。
だいたいは、物体抽出だけカスケードで抽出して、
その後DCNNかける例ばかりだったので、
物体抽出の精度に依存していやだなーと思ってました。
ちなみに、雑誌って、Interfaceとかですか? コンピュータビジョン最先端ガイド
毎年12月に出版されてたのに去年はなかったね。
もう出さないのかな?楽しみにしてたのに。 >>305
ありがとうございます。
参考に買ってみようかな。 最先端ガイドは4からあんまり目新しくなくなったから、買ってないなー 基本的なことですがSIFTとSURFの違いってなんですかね?
使ってて基本的にSURFの方が早いことはわかりますが
それぞれどういった特徴に対して特徴ベクトルを出してるんですかね? すいません
行列A、Bがあり、Bは行、列共にAより小さいとします。
いま、Aの一部に、Bをまるごと代入したいと思って、
Mat C = A(Rect(...))
B.assignTo(C)
のように書きましたが、うまくいきませんでした。
assignToの実装を見てみると、typeが未指定(負)だとそのまま目的の変数に代入するような実装になっています。
このような目的では、copyToを使うのが適切ですか?
目的の行列と型・行列サイズが同じならば、メモリの再割り当てはされない(Aに正しく代入される)ことは保証されていますか? cv::Matって内部で他のcv::Matとかとメモリ共有してるの怖くない?
constなのに中身が変わってるとかあるわけでしょ
関数型世界からの悲鳴が聞こえてきそうだ そんな世界からいくら悲鳴が聞こえたところで興味ねえよ
アホのお前たちは粛々とカーネルだけ書いてろ 質問です。
カメラからキャプチャしてhaarcascadeを用いて
顔認識することができました。
認識された箇所にrectangleを用いて四角形を作ることができたのですが
その範囲内だけや範囲外だけを塗りつぶしたりぼかしたりはどうすれば
いいのでしょうか? >>314
その矩形のマスクを作って処理引数の後につける 画像にモザイク処理がされているかどうかの判別は可能でしょうか? モザイクの種類にもよるだろう。
矩形パッチ内の色が均一なモザイクもあるし、グラデーション掛かってるモザイクもある。
前者なら周辺ピクセルの色見るだけだから余裕。
JPEGノイズ乗ってるとか、そういう特殊なのは頑張るしかない。 OpenCVってメモリリークしない?
cvInitImageHeader で IplImage を初期化して、
cvResize で 画像をリサイズするだけの簡単なプログラムなんだけど、
プログラム終了時に Detected memory leaks! って言われる。
サイズは24byteとか16byteとか小さいから、画像データではない。なんだろうね。
cvInitImageHeader で初期化した IplImage は開放関数呼ばなくて良いんだよね? たったこれだけのコードでメモリリークって言われる。
int WINAPI _tWinMain( HINSTANCE inst, HINSTANCE prev_inst, _TCHAR *cmd_line, int show_cmd )
{
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
IplImage dst, src;
static unsigned int dst_img[1024][1024], src_img[512][512];
cvInitImageHeader( &dst, cvSize( 1024, 1024 ), IPL_DEPTH_8U, 4 );
cvInitImageHeader( &src, cvSize( 512, 512 ), IPL_DEPTH_8U, 4 );
dst.imageData = (char *)dst_img; src.imageData = (char *)src_img;
cvResize( &src, &dst, CV_INTER_CUBIC );
return 0;
}
Detected memory leaks!
Dumping objects ->
{2529} normal block at 0x048CD330, 56 bytes long. ちなみに、cvInitImageHeader を使わずに cvCreateImageHeader と cvReleaseImage を対に使ってもダメだった。
>>322の中身をループに突っ込んでも、メモリリークの量は増えなかったから、
何らかのグローバルな管理領域が開放されてないっぽい。
ということで問題ないっちゃないんだが、気持ち悪い ミス
cvCreateImageHeader → cvCreateImage static unsigned int dst_img[1024][1024], src_img[512][512];
alloc 汁 つーか、Willow もインテルもとっくに抜けてるソフトウェアを
使うってどうなんだろ。オープンソースビジネスって成り立つ気がしねぇ adaptiveBilateralFilterのソースってどこにあるのん? 質問なんだけど、ios版のOpenCVでVideoCaptureのsetとget使えないのって仕様なの?
set(CV_CAP_PROP_POS_FRAMES, 0)で動画の最初に戻りたいんだけど、設定されない。 VideoCaptureはカメラ制御だから、動画の最初に戻るのとは違うんじゃね?
cvCaptureFromFileと勘違いしていると予想 VideoCaptureはファイルも扱えるのでいけるはず
今やってみたらwindowsでは動く。macは持ってないのでわからず(OpenCV3.0 RC1) 3.0ついにリリースされたのう
今週末はこれやるか >>322
いまどきなぜ cv::Mat をつかわずに IplImage なのか ええっ Mat, Mat_, Matx だけでは足りなくてまた新しいやつがでたのかい 後方互換も大事だけども、
シンプルなのと高機能なのの2つに絞れない物か const cv::Mat& で受け取っても、
内部でmat(ROI)して新しいcv::Mat(not const)を生成してしまえば中身を変更できるんだな…
operator()(ROI) constでconst cv::Mat返さないのはおかしくね?
(既出だったらスマン) >>339
んーおかしいというか、Matのコピーコンストラクタが元々「浅い」コピーで
あることはドキュメントに書いてあるので、そういうもんだと思うしかない。
正直、openCVのライブラリデザインはいちいちイケてないところが目立つけど
シンプルでエレガントなものをまったく目指してない人たちが作ってるので
いろいろしょうがないと諦めよう。 >シンプルでエレガントなものをまったく目指してない人たちが作ってる
OpenGLと同じ臭いがする cv::VideoCapture() のインスタンスの生成、破棄をするたびにスレッドが増えていくんだけど、そういうもの?
破棄前に release() を実行しても変わらず。 Opencv2から3への移行はいつごろがいいんだ
まだ安定性とか不安なので2のままだけど それはおめえさんの不安の算出方法と閾値に寄るんじゃないですかね 俺ちゃんは〜、IplImage使いを〜、やめへんで〜 >>346
レガシーコードの保守以外でいまIplImage が必要な箇所ってあったっけ OpenCVで動画の画像認識をする場合
ハードウェアのシステム要件(動作クロック等)はありますか?
処理に必要なハードの最低条件が知りたいのですがエロい人お願いします >>350
顔認識なんかは結構重かったような気がする。
そういう意味で、動画処理するときはVGAまで解像度を落とすだとか
フレームを間引きするだとかをしないと間に合わんこと「も」ある。
使いたいハードで実験して細かい条件を合わせてくれ以上のことを
言えない気がするよ。 SIFT特徴量をcomputeで抽出しすると、
その128次元の数値はどういう対応になっているのでしょうか?
SIFT特徴量が輝度勾配ベクトルの8方向*16ブロックということは理解しておりますが、
実際、どの値がどのベクトルに対応しているのでしょうか?
また、その対応を確かめる方法はあるのでしょうか? >>355
3.SIFTの論文を読む。オリジナルじゃなくても ttp://www.vision.cs.chubu.ac.jp/sift/ から
藤吉弘亘. "Gradientベースの特徴抽出 - SIFTとHOG - というPDF(でもPPTでもいいけど)を読めば
128次元へのエンコードの詳細がわかる。 >>356
実際に計算して確認する方法ですね。
ありがとうございます。 正面以外の顔も検出したかったから正面顔&ある程度横向いた顔の検出器自作したけどゴミすぎて笑えない
誰か俺の3週間返して 3次元的な画像認識ができるようになれば完璧ということかね? >>361
>学習データの作りこみがキモッ
に見えた。
ひどいことを言う人だなぁと思った。 俺の顔を顔として認識せずに何故か右肩と右耳を顔として認識してくるゴミ
あんまりふざけたことするなら削除すんぞ産業廃棄物 さくらインターネットのスタンダードプランではOpenCVを動かすことは出来ないのでしょうか?
makeすると、下記のような意味不明なエラーがずらずら出てきます。
/home/xxxxx/local/src/opencv-2.4.9/modules/objdetect/src/datamatrix.cpp: In function 'std::deque<CvDataMatrixCode, std::allocator<CvDataMatrixCode> > cvFindDataMatrix(CvMat*)': 漏れ >>369 じゃないから
>>370 に同意のつもりで書いたんだが つうか検索すりゃ一発目でOpenCVをビルドするブログが出てくるけどな
その上で出た結論が、お前には無理 3.0でcontribを追加で展開してビルドしたらそこだけビルドエラー出たんだけど
通常のソース達と同じ場所に入れてあげないとだめなのかね?ビルド時に場所指定できるし、別の場所で問題ないと思ったんだが。 3.0 で cvNamedWindow は何をリンクすれば使えるんだろう?
$ cd /c/opencv3.0/bin
$ nm *.dll | grep 'NamedWindow'
しても何も出ない… >>382
どうも cmake のオプションの組み合わせのせいで opencv_highgui300.dll が
作られない設定になっていたようです。
というわけで、cmake のオプションを見なおしてみます。
お騒がせしました。 Cmake使ってるなら、リンクライブラリ名気にする必要ないじゃん。
プロジェクトのソリューションもCmakeで作ればだけど。 >>384
説明不足でした。 cmake は opencv のビルド(の準備)にしかつかってません。
いずれにせよ CMakeCache.txt には
//Module opencv_highgui will not be built in current configuration
HAVE_opencv_highgui:INTERNAL=OFF
とありましたから、いろいろoffにしすぎて highguiのdll 自体そもそも作られていなかったわけです。 >>385
あーごめん
知っててつまらない茶々入れてしまった opencv 3.00 5000x3000の画像をAKAZEで処理しようとするとエラーをはく
〜〜
Ptr<Feature2D> detector = AKAZE::create();
detector->detect(gray_image, keypoints);//ココでエラー
〜〜
Unhandled exception at 0x75A3C42D in opencv_test.exe: Microsoft C++ exception: cv::Exception at memory location 0x0018E504.
1250x750くらいまで1/4に縮小すれば通る
高画質でやってみたかったのだがダメか・・・ >>387
試してないけど、64bitでビルドしてみたら? MSYS2 で 64bit ビルドうまくいかないんじゃ〜 opencv 3.0
windows7
eclipse
言語 java
趣味でopencvを数日前から弄っています。顔認識を試してみたくて
https://blog.openshift.com/day-12-opencv-face-detection-for-java-developers/
ここのサイトを見ながらコツコツやっています。(情報が古いですが、探り探り)
で、ビルドしたら↓の行で例外が出ました。
CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath());
エラーメッセージ―――――――
Exception in thread "main" java.lang.NullPointerException
at opencv.FaceDetector.main(FaceDetector.java:17)
―――――――
haarcascade_frontalface_alt.xmlのパスが取得できなかったと思われるのですが、そもそも
haarcascade_frontalface_alt.xmlをどこに置いておくべきでしょうか?あと、認識用の画像も。
プロジェクト内ならどこでもおいてよいかと思っていたのですが…いろんなところに置き換えてみても例外が消えません。
対処法をご存知の方、お教えいただけたら幸いです。 ちなみにソースコードはこうです。
――――――ソース
package opencv;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.objdetect.CascadeClassifier;
import org.opencv.imgproc.Imgproc;
public class FaceDetector {
public static void main(String[] args){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
System.out.println("Running FaceDetector");
CascadeClassifier faceDetector = new CascadeClassifier(FaceDetector.class.getResource("haarcascade_frontalface_alt.xml").getPath());
Mat image= Imgcodecs.imread(FaceDetector.class.getResource("mako.jpg").getPath());
MatOfRect faceDetections =new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
System.out.println(String.format("Detected %s faces", faceDetections.toArray().length)); for(Rect rect :faceDetections.toArray()){
Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width,rect.y + rect.height), new Scalar(0,255,0));
}
String filename="output.png";
System.out.println(String.format("Writing %s", filename));
Imgcodecs.imwrite(filename, image);
}
}
――――――ソース終わり
以上です。
よろしくお願いいたします。 >>390
そのxmlのあるところにクラスパス通してみた?
逆に、クラスパスで指定されたディレクトリにxmlを置いてみるとか。 >>393
おお!
その手がありました。
やってみます。ありがとうございます! 時間がかかりましたが、何とか顔の検出ができました!
結構面白いものですね。これ。
さすがにちょっとでも顔が他人とかぶってたりすると検出できないようですが、オープンソースでここまでできるなんて。
テキストを表示させたいと思い、調べてみたら日本語は無理のようで。
アルファベットでいいから表示したいなーと思い
http://opencv.blog.jp/java/text
CoreクラスにputTextなるものがあることを知りました…が、
エクリプスがCoreクラスにそんなもんはない!と怒っています。
―――
メソッド putText(Mat, Point, int, float, Scalar) は型 Core で未定義です
―――
https://github.com/tanaka0079/java/blob/master/opencv/DrawText.java
この辺りの情報は古いのでしょうか?
Opencvのバージョンは3を使っています。
そもそも、highguiのようなクラスも置き換わっているようで。
ご存知の方、お教えいただけたら…と思います。 コードはまんまコピペでこうです。
Core.putText(im, "Earth", new Point(rect.x, rect.y), Core.FONT_HERSHEY_SIMPLEX, 1.6f, new Scalar(20, 0, 200), 3);
もちろん、import org.opencv.core.Core;は記載してるのでインポートはできています。 OpenCV3.0.0のjarを作ってみて見たけど、確かにそういうメソッドは無いね。
org.opencv.imgproc.Imgprocクラスに移ってるみたい。
こういう、元々がC++のライブラリを他の言語にバインディングしてるような奴は、ドキュメントが充実してないのがきついね。
C++のヘッダからメソッドを探してクラスを見つけるというようなことを今はした。 >>397
おお!
ありがとうございます。
org.opencv.imgproc.Imgprocですね。
そうなんです。ドキュメントが少なめです。
javaに対応したのもごく最近なんですね。
でも、Opencv自体をjavaで使えるだけでもありがたいものです(^^ 画像の特徴量っての求めてみようと、
はじめてopencvをインストールしました。
なかなか動かないっす。
imreadまでは動きましたが
SIFTやSURF、ORBなどが
動きません。
ないっていわれますが、
一応、xfeature2dはmodulesに
コピーしてコンパイルしたのですけど。
次は、vs2013のNuGetは試してないのですが
やってみようと思います。 馬鹿のチョンには文化も違うから
理解できないんだね!
日記じゃないのよクソチョンさん? で、答えられる?答えられないの?
出来損ないなら出しゃばらないでくれる? cmakeのオプション設定ミスって必要なライブラリが生成されてないんじゃないの? ダメな奴は何をやってもダメってことだろ。あきらめろ 以下のコードの
src_gray = src_gray > 127;
という箇所はどういった処理をしているのでしょうか?
Mat src, src_gray;
src = imread("sample.jpg);
cvtColor(src, src_gray, COLOR_BGR2GRAY);
src_gray = src_gray > 127; Webカメラをcv::VideoCaptureで制御するとき、
grabや>>でフレームを取得すると新しいフレームが撮影されるまで待機するみたいだけど、
これってフレームが更新されていない場合は待機せずスキップするみたいなことはできないんだろうか?
カメラごとにスレッドを立ててそこで動かせば良いんだろうけど、
複数台のカメラを制御する場合とかちょっと不安だ 角度の変化にも対応した顔検出器作ろうとちまちま3つほどやってみたけど全部ゴミでした
俺の4ヶ月分の暇な時間返してマジで >>411
フレームをスキップする時、スキップしたフレームの画像はどうするの?
多分コマ落ちをわかりやすくしたいんだろうけども、
やるとしたらタイマー設定して、フレームが取得されなかったら真っ黒の画像を挿入するとかでどう?
やったこと無いけどもw >>414
いやそうじゃなくて、新しいフレームを取得する間、30fpsのカメラなら最大1/30秒近くそのスレッドが止まるわけじゃん
例えばOpenGLを使っていてペイントの関数内でカメラからフレームを取得すれば画面がその間固まってしまう
こういう時新しいフレームがまだ撮影されてなければスキップできると便利だなと >>415
callback準備したasyncgraberなければ作れば良いのに
opencvはそんなのもなかった?
cでは自分でasyncつくってたからよくわからん Windowsでプレイする麻雀ゲームがあるのですが、
それを自動でプレイする麻雀AIを作りたいと思っています。
麻雀ゲームを操作する部分で画像認識とマウス操作を使いたいのですが、
その画像認識でOpenCVを使えないかと考えています。
OpenCVは全然知らないのですが、何か画像認識で参考になる書籍やWebサイトなどおすすめを教えてもらえないでしょうか? というか雀牌なんて表示位置決まってるんだから
OpenCVのパターンマッチャー使うよりより↓と同じ方法を使った方が楽
http://qiita.com/YSRKEN/items/819dd3acf750ff5c0e7f >>420
参考になるURLありがとうございます。
同じ方法というのはJAVAを使うということでしょうか?
艦名の認識で書かれているように簡略化するということでしょうか?
これまでWin32APIでアプリを作っていたもので、可能ならC言語でやりたいのですが、
同じようなことは簡単にできるのでしょうか?
あと麻雀牌に利用することはできても点数状況の認識などは結局OpenCVを使った方がいいのでしょうか?
たくさん質問してしまってすみません。 ごめん
やっぱ100年早いって意見の方が正しかったわ
一昨日きやがれ >>421
定型的な画像しか入力されないんだから画像認識なんて必要ない。
スクリーンショット撮って特定の部分を調べるだけ。
どこに表示されるか決まってるんだから画像をバイナリ比較したらいい。
n 文字目から strcmp するのと大差ない。
次からは初心者質問スレか知恵袋でやれ。 >点数状況の認識などは結局OpenCVを使った方がいい
画面に点数表示されてるなら
そのまま読み取った方が楽じゃね 知識不足で色々すみません。
>>423
OpenCVなしでできそうですね。
ありがとうございます。
>>427
そのままって言うのはどういうことでしょうか?
OpenCVを使わずに423さんがおっしゃるやり方を点数にも適用する感じでしょうか? ×知識不足
○身の程知らず
ぶっちゃけ何でム板にいるの?ってレベル エッジ抽出した後に抽出したエッジを一定の大きさに分割する方法はありますか? あーはいはい、抽出した輪郭から隣接領域を再抽出したいって話ね
方法はあるけどここに書くにはフォーム欄が小さすぎて無理だな http://codepad.org/eoG65A9x
以下のプログラムのように(実際はエラーで動作しませんが)特定のアプリケーションのプロセスメモリを読み取ってそれを適時画像に文字として表示するプログラムを作りたいです。
どのようにすれば可能ですか? Sleep(1000)の代わりにwaitKey(10)などにしたところ無事いけました。
とあるゲームで敵のHPを画面表示するツールを作りたかったのですがいけそうですw opencv1.0に関しての質問です。
cvMatchTemplateでの結果を入れたIplImage構造体があって、cvMinMaxLocを使えばもっとも一致した点が求められるのは分かったのですが、
一定値以上の複数点を求めるにはどうすればよいでしょうか?
IplImage構造体の中にchar *imageDataというのがありますが、これをどうにかして調べるんでしょうか? >>436
- C言語の配列・ポインタがわかるか
- なぜ2.4や3.0ではなくopencv1.0なのか >>437
配列ポインタは一応分かります
opencv1.0なのはbcc developerで開発してるのですが、ネットで1.0の組み込み方法だけ分かったからです >>436
http://opencv.jp/opencv-1.0.0/document/opencvref_cv_matching.html
ここ読んでる?
result
比較結果のマップ.シングルチャンネルの32ビット浮動小数点型データ.image が W×H で templ が w×h ならば, result は W-w+1×H-h+1のサイズが必要.
って書いてあるから、
flota *result = (double *)imageData;とすれば普通に読めるんじゃない? >>440
レスありがとうございます。
知識不足で申し訳ありませんが、確認させてください。
IplImage result;
float result2;
cvMatchTemplate(image,templ,result,method);
result2 = (double *)result;
としておいてresult2のアドレスが指す値を見るということで合っていますか? あ、ごめんなさい。以下でしょうか。
IplImage result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (double *)result; >>441-442
すまん、まちがえた。
float *result2 = (float *)result.imageData;
かな。これでresult2[0]〜result2[W-w+1×H-h+1]が結果のデータになってると思うけど。
試してないから間違ってるかも おせっかいだけど、どうも、見てる限りOpenCVでのIplImageの取り扱いに慣れてなさそうだから、まずはもっと簡単なところから始めてみたほうがいいかも。
例えば、256x256のIplImageを作って、左上が黒、右上が赤、左下が青、右下が紫になるようなグラデーション画像を作ってみるとか。
色違うけど、
http://www2.rgu.ac.uk/subj/ats/teachingweb/teaching/t16/Wk4-Colour/PhotoshopColourPicker.jpg
こんなやつね >>443
IplImage result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (float *)result.imageData;
なぜか上記のようにすると
. または .* の左側に構造体が必要
というエラーが出てしまいます。
せっかく教えていただいたのに、うまくできずにすみません… cvMatchTemplaeの3番目の引数ってポインタじゃないの >>447
IplImage *result;
float *result2;
cvMatchTemplate(image,templ,result,method);
result2 = (float *)result.imageData;
ごめんなさい。こうですね。
書き込みにする時に変数名を変えたので間違えていました。
結果は変わりません。 >>448
アロケートもしてんの?
ttp://opencv.jp/sample/matching.html
dst_img = cvCreateImage ( .... ruby-opencvなんですが必要な色の領域だけ抽出した二値画像の重心はどのように計算すればいいのでしょうか
リファレンスガイドを読んでもよく分からなかったです >>449
やってます!それがいけないんですかね? >>451
そうですか!コードやエラーくらいそのままコピペできないんですかね? >>451
・あなたは言葉で状況を説明しているが「言葉による状況描写」そのものが
誤った認識に基づいているならば情報量ゼロ
・あなたは周辺コードやエラーを「ノイズ」だと思って書かなかったのだろうが、
ここで助言をできる人たちにとってそれこそが情報 >>450
重心とかあまりわからんけど座標の平均値を取ればいいだけじゃね? Aの上半分をBにコピー
Bの上半分をCにコピー
これだけでエラー出てくるけど何なのこれ エスパーするとファイルがロックされているか、
範囲がズレてるんじゃね 知らんけど「OpenCV 浅いコピー」でググってみると幸せになれるかも それはわかっているから、
書き込むならせめて何を勘違いしたかくらい書け 頭が悪かったから、ではなく
なにをどうしたらどうなるとおもっており、
それはそもそも単純にAしたらBになるという誤解の反映であり
そのような誤解を持った理由はOpenCVにおける設計が若干クソ
なのはさておき、二種類のコピーがある事、更には二種類のコピーが
用意されてる理由などを把握していなかったからでした。
これらのコピーはそれぞれ浅いコピー、深いコピーなどと呼ばれておりうんたらかんたら。
使いドコロとしては浅いコピーは(ここになんか書く)
一方深いコピーは(なんか書く)
注意しなければならないこととして Mat を operator= でアレしたときには(うんたらかんたら)
(ごにょごにょ)というわけで、何をほげしたい場合には浅いコピーで十分で具体的には
ほげほげで十分ですが今の場合にはほげげをすることが必要だったので
深いコピーが必要であり、そのためなんとかという構文で明示的にクローンする
必要がありました。
みたいに書く。そうやって書いておくとここ読んでる人にも有益で、おまえが
他人に教えるときにもテンプレにできるのでWin-Winだな。 みんなでごにょごにょ部分を穴埋めして文章完成させるスレってのがあったな Cudaで高速計算したかったらopencv3使うしかないのかな
まだ2のままでいたいのだけぢ Cudaで超解像画像やるとか凝ったことはopencv3でしか出来ない? OpenCV触り始めたんですけど、サンプル見てとりあえず、
IplImage *src_img = NULL ;
char imgfile[] = あれ、すいません。
コピペで貼ったんですが切れてしまいました。
IplImageをcvCreateImageしてcvReleaseImageしただけでメモリリークしているようなのですが、
他に何か終了命令などはあるのでしょうか? >>322-323と、その後参照
今はcv:Matだから古いサンプルを見るのを止めるのが一番かもしれんがw OpenCVはただのゴミだからインストールしないのが吉。
パソコンプログラミングの超神クラスの俺でも100時間かかって動かせなかった。
はっきり言って時間の無駄。
すでに何百時間も費やして動かせるようになってる人にはとやかく言わないが、
導入を検討してる人はとにかくやめておけ。 >>478
パソコンってことはWindowsかMacだろうけど、どっちも標準の
開発環境でやってればそんなに迷うようなことないんじゃない?
まあでもそうでもないか。Windows+VSでやってたとき、わりと
DLL関係のプロジェクト設定で躓いて先生に助けてもらったわ。
ああいう設定って一度知ってる人に聞かないとだめだね。 >>478
どうしてゴミだと思ったの?
どの辺が理解出来なかったか他人にうまく説明出来る?
本気でやる気があったらここで聞いてくれてもいいんだよ? パソコンプログラミングの超神クラスの俺さんなんてスルーしとけ IplImageってどこで使われてるの?
組み込みは分かるけど >>479
環境書いていませんでしたがWindowsです。
今はMatなんですね。気がつきませんでした。
あとcvMatでも_CrtSetDbgFlagでフラグ立てておくと
メモリリーク出ますね〜。心臓に悪い。 Opencv2とopencv3の両方で動くようにするにはcvmat使えばいいの? Pythonはやばいな
6行くらいでCVスクリプト動くからな VS2015 Win32コンソール
int main(){
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
//_CrtSetBreakAlloc( 335 ); // リークの出力の{}内の数字に適宜変更して有効にすればブレーク
cv::Mat search_img = cv::imread( "zbase.png", 1 );
}
new してる箇所
〜\opencv\sources\modules\core\src\matrix.cpp(241)
CV_SINGLETON_LAZY_INIT(MatAllocator, new StdMatAllocator())
それを記憶する箇所
〜\opencv\sources\modules\core\src\matrix.cpp(231)
g_matAllocator = getStdAllocator();
たったこれだけでリークしちまうのか
後始末してくれるメソッドの類はないっぽいし、
外側から無理矢理クリアするにも適切な方法がわからんし、どうしたもんかなぁコレ
C#やPhythonで使うにしてもアンマネージドな部分のリークに不安が残る
それとも識者は後始末かリークさせないようにアロケータ自前で設定してたりするのん?
おせーてエロい人 追伸
目的はテンプレートマッチングなんだけど、
メモリリーク箇所全部追跡しようとしたら1回検索するコード実行しただけですんげぇログ吐き出してくれて
思わずハードディスク毎窓の外にブン投げてソースコード破棄したくなった 何か気持ち悪い文体だけど自分面白いと思ってそう
質問するならそれなりの態度でお願いするべきだと思いますよ 質問があります。
cv::Mat depthMat;
depthMat=cv::Mat(depth->height,depth->width,CV_32FC1,depth->data)/4500.0f;
とあり、最後にcv::imshow("depth",depthMat);
で表示されているんですが、いままでCV_8UC1やC3,C4だったのでどうして表示できてるか
分かりません。
中身にどんな値が入っているかもわかりません。
8bitなら0~255で理解できたのですが、32bitだとデータに.atや.dataでアクセスしても変な数字しか出ません。
それに.atと.dataで値が違うのも気になります。
どなたか教えてください。 depthMat.at<float>(x,y)とかで正しい値とれない?
dataの方は、((float *)depthMat.data)[i]とかしないと正しい値取れないと思うよ。
結局はバイナリデータのアクセスだから、キャストちゃんとしないとまともな数字が取れないと思う 494です。>>495さんの言う通りでした。ありがとうございます。
後、質問なんですがjetson tk1とかに関する質問ってどこの板が適切ですか?
ご存知の方がいらっしゃいましたら教えてください。 どっかのへっぽこ大学じゃなくてMITがドヤ顔で作ったライブラリなんですが
宣伝乙脳になるとこういう反応になるのか 有名大学だからって有難がる権威主義でも無いし
良い物ならみんな使ってる >>500
君が >498 でないなら釈明する必要はないし、>500 の言い分はごもっともだがその理屈から >498 が出てきたら失笑なことは変わらない。 二重指数積分公式は最高性能の数値積分法であるにもかかわらず
「白人が作ったものではないから」という人種差別的な偏見によって二十年間世界から無視されていた。 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
b >>508
あちこちコピペしてるだけだから反応すんな 2ちゃんってスパム灰汁禁にする機能あったはずなんだが なんか文末の文字変えてるみたいだけど、これで回避できんのかな。 糞鯖に変更されたタイミングで規制まで甘くなった感じがする Qtを組み込んだ時にnamedWindowするとデフォルトで出るコントロールパネルだけど、最前面に持ってくる方法はないのですか?
気を抜くとすぐ背面に隠れて、ウインドウ扱いされてないからタスクバーから復活できないし困ってます OpenCVとはちょっと違うというかOpenCVのテンプレートマッチングの原理の質問になってしまうのですが、
たとえば、DFTの変換結果をそのまま逆変換してもそのままでは元の画像にならず、
各ドットの値を面積で割らないと元の値にはなりません。
では、検索対象画像Sとテンプレート画像TのDFTの変換結果から、
R[y][x].実数 = S[y][x].実数 * T[y][x].実数 + S[y][x].虚数 * T[y][x].虚数
R[y][x].虚数 = -S[y][x]実数 * T[y][x].虚数 + S[y][x].虚数 * T[y][x].実数
の様な計算でRに畳み込み、Rを逆変換して出てきた値を
1.0(完全一致)〜0.0(完全不一致)や-1.0(完全逆位相)の値に正確に合わせるには
どの様な計算を行えば良いのでしょうか?
ttp://iphone.moo.jp/app/?p=630
(OpenCV3.1ではtemplatematch.cppの635行目、crossCorr関数となってもっと大きくなっていますが)
を言葉通りに受け取って相関係数を求めてみても1.0〜0.0の様な値にならず、
OpenCVのソースの理解を試みたものの、規模が大き過ぎて断念しました。
スーパーハカーな皆様、出てきた値の扱い方のご教授をお願いします。 突然ですが
画像処理の雑音の例でよく、インパルス雑音が挙げられていますが、現在で実際にインパルス雑音の除去が必要な場面はどういう画像でしょうか?
特に高発生確率のインパルス雑音がのる場合はどんなときでしょうか? ザクのメインカメラを想像しろ。宇宙空間はインパルス雑音ばかりだろ OpenCVとGPUImageって、どっちを使うか何を基準に決めたらいいんでしょうか?
iOS/Android環境で動作するアプリです。 何を基準にするかは君が何をしたいかで基準そのものが変わるんじゃね 自己解決しました
積和の場合、周波数空間で検索対象とテンプレートの位相と振幅を乗算して
元の空間でのドット毎の数値を極端に大きくする事によって、
明度に関係なく類似の度合いを検出しやすくしていると理解しました
しかし、書き込みには無かった本来の目的とは違っていたので、再度質問させて頂きます
ttp://opencv.jp/opencv-2svn/cpp/object_detection.html
CV_TM_SQDIFFの場合、検索対象画像Sとテンプレート画像TをそれぞれDFTで変換した後、
その変換結果である周波数空間にてどの様な演算を行っているのでしょうか?
>>514のCV_TM_CCORR又はCV_TM_CCOEFFの場合、
ttps://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
の離散フーリエ変換表の「時間軸畳み込み、周波数軸積」を複素共役によって反転した式だった為、
簡単に理解できたのですが、元の空間での”検索対象とテンプレートの位相と振幅の差の2乗”の総和を
周波数空間(フーリエ変換後の2次元配列)にて求める場合、どの様な式になるかまでは理解できていません
プログラムのコードの提示、数学での式、どちらでも構いません、よろしくお願いします opencv3.1でcvCreateKDTreeをつかうにはどうすればよいのでしょうか。また、代替品などは存在しますか? 質問させてください。
OpenCVSharpで画像表示させるとき
Cv.NamedWindow("window");
をいれても入れなくても
Cv.ShowImage("window",img);
で画像が表示できますが、あったほうがいいのでしょうか。
調べてみてもnamedwindowの必要性がわかりません。 >>521
namedwindow してなければ処理に応じて画像を書き換えるとかできないよね。
OpenCVでインタラクティブなプログラムを書くときには namedwindow しておいたほうが吉 >>522
書き換えの際に表示内容だけかえるときということでしたか!
ありがとうございました。 VS2010で2.4を使ってたのをVS2015と3.1に上げてみたが
未だにc4819の警告はでるんだな カメラで撮影した顔写真と予め撮っておいた顔写真を照合して
個人認証をするプログラムをつくっているのですが行き詰ってます
顔の特徴量を抽出する方法で作っていたのですが精度が悪い状態です
何か他によい方法はないでしょうか
撮影は常に顔の正面から行うつもりです >>527
解像度は640x480で距離は2〜3mを想定してます opencvで顔認証したいのですがopencv3.1では口や鼻のxmlファイルがありません
素人なのですがどうすれば良いのでしょうか? 自前で画像処理を行う関数を作った場合、
元の画像を受け取る引数はconst参照にするのと浅いコピーで受け取るのどちらが良いんだろうか?
最適化されるだろうからどちらも同じ? CVに関係あるインスタンスなのか、全く関係のないビットマップハンドルやラスタイメージなのかで
浅いコピーの量の事情は大分変わってくる 肝心のこと書くの忘れてたcv::Matの話です。8UC3か8UC1で。
基本はopencvで処理するけどopencvにない処理なんかを実装した場合にconst参照にするかどうかで悩んでる。 リファレンスのカウントとかしてっからその関数だけで全ての処理が完結するならconst参照でもええんでないかい?
不特定多数からアクセスされるリファレンスカウンタとか関わってるから最適化掛からないとおも
速度、大きさ、合理性だけで言えばconst参照が速くて小さくなって合理的
微々たるものだろうから呼び出し回数が大した事なくて、将来の仕様変更の対策とかIF揃えたいとかに拘るなら
まんまMat受け取って当面は暗黙のシャローコピーでも何でもお好きな感じでとしか >>531
引数画像を変更するつもりがないなら const 参照でいいはず。
画像の shallow copy は、仕様通りならば実質的に const 参照と
同じことになるはずだが、WGの実装力を信頼してはいけない。 opencv3.10では2.4シリーズのhaarcascade_mcs_mouth.xmlを使って口を検知することが出来ません
どのようにすれば良いのですか? OpenCVSharpで、getRotationMatrix2Dで取得したMat型の行列にアクセス(書き換え)をしたいのですが、
やり方が全くわかりません。
ある場所(例えば[1,2]の場所の値を書き換えたいときはどのように書けばよいのでしょうか。 mat.At<double>(1,2)か、mat.At<float>(1,2)か、その辺だと思う
参考:https://gist.github.com/ochilab/d720c9d961ed04b8c707 >>538
ありがとうございます。助かりました。
mat.At<double>で変数に値を取得して、
それを書き換えた上でmat.Set<double>でセットするのですね。 javaでHoughLinesPで直線検出しようとしていますが、
候補が複数あるはずなのですが、一本しか検出できません。
何か心当たりがあればご教授ください。
↓こんな感じで引数を渡しています。
Imgproc.HoughLinesP(CannyImage, Lines, 1, Math.PI/180, 50, 100, 50); 画像も貼らずに検出できませんとか言われてもな
thresholdかminLineLengthでも下げてみれば >>542
http://imgur.com/gD7exqZ.png
↑がcanny画像で、これにhoughかけても一本しか検出されなくて困っています。ご指摘いただいたパラメータも変更してもだめでした。
ちなみに一本というのはLines.cols.()が1を返してます。 OpenCVSharp使っているんですが
ゆらゆら揺れる水面で、突然激しく揺れる部分が時々現れるという動画があるんですが。
その激しいタイミングと位置を探したいんですが、まったく画像処理の知識がなくて
できません。
どなたかわかる方いませんか? RGBやHSB色で移動量見るとか、特徴点出して見るとか、ヒストグラムで調べるとか、
やり方は写ってるのに合わせて色々あるだろうけど、質問の仕方から察して作るの無理だと思うよ >>546
日本語むちゃくちゃですね
すみません
今のところグレースケール→2値化して
白いピクセル数の変化を見たりしてます。
本とかサイトでもなんでも教えていただけないでしょうか 最近のビデオカードはハードウェアで超解像できるそうだけど自分のmpegファイルをアップコンバートすることは出来ないのでしょうか deblurringしたいんだけどうまくいかない
IBPとウィーナーフィルターでやってるんだけど Halideが画像処理だけじゃなくて線形代数計算全体も高速化してくれないものか オプティカルフローで画像をつくると1分以上かかるのですが、高速化できますでしょうか。
1280x960の画像2枚を、sperres::createOptFlow_DualTV1()で、calcしています。 昨日ググったら、自分でコンパイルするみたいです。
コンパイルしようとしたら、ターゲットの装置にGPUが無かた。。。
後、オプティカルフローに速いもの遅いものがあるみたいで、
奇麗なのは遅いもの。。。 ソース画像の中から特定の画像を検出する方法としてMatchTemplate(テンプレートマッチング)と言う物がありますが、他に高速な方法はないでしょうか?
ゲームの自動操作が目的のため、検出したい画像は固定(サイズ傾き明るさは変わらない)と言う条件です。 テンプレートマッチング以外の画像検出にはどの関数を使用すればいいのでしょうか? >>559
テンプレートマッチングだとダメなの?どのくらいの性能が必要? USBカメラのfpsが安定しません
30fpsの物を使っていて、9割は33msで処理をしてくれますが残りは100msを超えたりします
安定させる方法を探しています カメラの機種もどういう処理してんのかも分かんないからエスパーしかできんが
暗いときとかにカメラがフレームレートを変えて露光時間を調整してるってことがよくあるかなあ
この場合カメラの設定で露出とかホワイトバランスのオート設定をオフにすると解消される openCV を build するのに cl.exe ではなく ICL.exe を使う事は可能でしょうか? waitkeyってどんな役割ですか?
フレームレート30なら33msにしろって書いてあったんだけど、例えば画像処理するとして、1ループ全体で33msなのか、1ループを処理時間+wait33msなのかどっちなんだ、もっと違う考え方? >>570
2010の参考書に書いてあった
とりあえず33msでいいでしょうみたいな
普通ならそれでいいんだろうけど、都合上ループの処理速度だけはシビアにしたい webカメラの話で良いのかな?
FPSの設定は VideoCapture::setかなんかでやるはずなのでwaitkey関係ない
waitkeyはキー入力の為の待機なのでキー入力しないならそもそも不要
そこで33msも待機させたら同じループ内の他の処理で1msとか時間かかった時フレームレート落ちる予感 それFPSの設定知らずに最速再生の状態で各フレームのウェイトを33.333...msにして
30FPSの速度にしてる、とかじゃね?(1000ms/30FPS) >>572
やっぱりset使うんだよね
自分も落ちそうだと思ってる
使ってた本にはwaitkeyないと動きませんって書いてあって、なくしたら動かなかった気もする
>>573
たぶん本はそんな感覚だと思う
自分はいらないと思ったからWait1msでやってたんだけど、フレームレート変えれるwebカメラ買ってもらって、いろいろ考えてたらwaitkeyってなんだ?ってなった 確かにhighguiを使ってる場合waitkeyがないと表示されないとかあったかも。うろ覚えなので仕様見てくれ。
あと>>とかで新フレーム取得まで待機してる間はキー入力を受け付けないだろうから
キー入力が必要な場合そこで待機させるよりwaitkeyを多めに設定する方が良いかな
まあ本気で何か作るならこの辺の機能は使わないだろうけど >>576
確かにhighgui使ってます
使わないで出来るのね…
使ってないサンプルプログラム探してみる
ある程度計測したら終了させる予定だから入らないかなぁ
waitkey不確定要素が多い気がしてならない >>577
言葉が足りなかったわopencv単独で表示するには他に方法はないと思う
opencvはあくまで画像処理とかのライブラリでGUIはちょっとした確認や処理のためのおまけみたいなもん
本気で動画やカメラを使うアプリケーションを作るならGUIは別のフレームワーク使うだろうということ >>578
つまりopencvはwebカメラの画像取得および出力に関してはあんまり機能がなくて、取得された画像を処理することに長けていると言うこと?
初心者過ぎてすまん
画像処理としては二値化で物体検出、重心を求めるぐらいしかさせてない… そもそもOpenCVに直接カメラのハードウェア設定をいじらせようってのが無理な話なのでは?
あくまで画像処理ライブラリだし。
FPSを変更出来るカメラなら、仕様書なり取説なりあるかと。
シビアに計算したいのならFPSだけじゃなく、露光時間や転送時間も計算しないとダメだし。
いくら30fpsに設定しても、他の時間で100msかかってたら無意味。 >>579
そういうこと
色々言ったけど勉強したりちょっとしたことやるには十分だしwaitkey(1)で良いと思う set用いてfps60に設定したのに全く変化なし…
じゃあ解像度変えてfpsあげようと思ったけど変える方法がなさそう
使ってるカメラの仕様には解像度1080pで30,720pで60と書いてあるのに… ロジクールのやつで試した時は解像度640x480で60fpsいけたな
ドライバ側の設定でオート機能オフにして露出下げたらあるいは って見落としてたけど解像度を変える方法がなさそう?
setでできるでしょ setは動画ファイル読み込み限定でカメラ設定はいじれないっていう情報が調べたら出てきた
どこまで信憑性あるかわからんけど
とりあえず解像度いじったけど逆に重くなった… opencvの取り込み処理とかウインドウ表示とかはちょこっとopencv使いたいとき向けのでしょ
きちんと使いたいときは取り込み処理を別に用意したほうが・・・ >>587
そっちの方面も視野にいれてます
初心者過ぎるので、簡単なやつ希望です… だーかーらー、カメラ標準ソフトを使うとか、
せめて取説や仕様書を読めと
作る側は「簡単な物」ほど作るのは難しいってことを理解しとけ あと、ハードウェアに出来ないことはソフトウェアには出来んからな
解像度やFPSの仕様以上のことをやらせようとしたら、
超解像とかハードルが一気に高くなる上に、あくまで「作られた画像で補完」になる >ハードウェアに出来ないことはソフトウェアには出来ん
日本語の使い方が正しくない >>589
カメラ標準ソフトか…
ロジクール製品なんだけど、取説とか仕様書はないに等しかった
>>590
スペック通りに動かしたいだけなんだ
とくに解像度はどうでもいい >>591
理解が正しくないよ
>>590が言ってるのは30fpsまでしか対応してないカメラで100fpsの映像を造りだすみたいな話
>>592
webカメラの製品独自の仕様はそれであるけど、探すだけ無駄。ほとんど非公開だろ
汎用的にwebカメラを制御する仕様はほぼ統一されてるしぐぐりゃ星の数ほど出るからそれ見ろ。それすら探せないってなら諦めろ >理解が正しくないよ
> >>590が言ってるのは30fpsまでしか対応してないカメラで100fpsの映像を造りだすみたいな話
この意味なら漏れの理解したまんまだな 今してるのはハードウェアでもOpenCVでもできることの話だろ
なぜまずOpenCVのマニュアルを確認しないのかは知らないが オートフォーカスとか露光の自動調整は本格的な画像処理するときにまずつまずく部分 <オートフォーカスや露光調整くらいは画像処理でやって
<リアルタイム60fpsで、画面解像度はFUHDで、分解能も8bitじゃなく16bitでやってね
<民生品でやってるから、そのくらい簡単に出来るでしょ? Qtバックエンドのウィンドウでマウスコールバック取るにはどうすればいいんだ? Qt組み込んだだけで本体はhighguiのウィンドウじゃないの??よく分からないけど よく分からないのでそこをなんとかお願いします。
マウス座標が取得できなくて大変困っております。 何故最初は小さいプログラムから作らないのか
qtとOpenCVでマウス座標取ってこい opencv3.1で
connectedComponentsWithStats使ってラベリングしたんだが
指定した面積以下はラベリング除外ってできる? >>606
言語はC++でVisualStudio2015 それぐらいの処理ならソースコード読んで自分で組み込んだらいいんじゃね >>606
そのまんま、ラベリング結果を操作するだけでいいと思うけど。どんな動作を想定しているの? >>609
指定面積以下にはラベル付けをしない
今は無理やりラベリングした結果の面積をif文で無理やり指定面積以下のラベルを表示しないようにしてる
だからラベル番号表示すると飛び飛びなんだよね
最終的にはラベル番号がちゃんと連番かつ面積以下を除去できるようにしたいわ あとラベリングした輪郭が途切れたりしてるからラベリング統合みたいなのできたらいいなって今考えてる 変数作って指定面積以下ならラベリング結果を格納するようにして採番したらいいだけでは >>612
これをそのままプログラムにすればいいと思う。 ラベリングで物体ごとにラベリングできないから領域統合してうまくラベル付けできるようにしようとした
watershedで出来ないかやってみたらラベル付けができなくなっちゃった
なんかいい方法ない? 肝心なの忘れてた
環境は
opencv3.1 c++ visual studio 2015 >>615
何で物体ごとにできないの?画素がつながってないから? >>617
複雑な形かつ輪郭が繋がってる部分もあるから
一つずつラベリングしたいけど二つまとめてとかになってしまう そういうのはどういう画像かによるからエスパーじゃなきゃわからないよ・・・ 公式でC#に対応してくれんかな
OpenCVSharpの人とか頑張ってくれてるけども 質問です。
cv::Matに画像ファイルを入れる場合は、cv::imreadなのはわかりました。
unsigned char Gray[Y][X]のようなバッファを、cv::Matに代入するには、どうするのでしょうか。 for文をネストして多次元配列の中身を一つひとつ丁寧にdataメソッドでMatクラスに移植する >>623
俺のアルゴリズムぱくんなよ
todo修正コメントは入れとくがw 赤青のLEDを別々に認識させたいんですが、RGBの閾値よりHSVのほうがうまく認識させられますかね? あとカメラのオートフォーカスや露光調節をしたいんですが、highguiでは無理ですか? >>628
場合による
色空間のチャンネルをsplitしてinRangeメソッドで判定するのがスマート
>>629
v4l2-ctl --set-ctrl=contrast=0 >>630
opencvでは無理なんですね…
プログラミング全然できない自分にとっては敷居が高そうです ステレオマッチングでなんかやろうとおもってggったんだが、ネットに落ちてるサンプルコード的なのがまったくうごかん助けてくれ…
Xcodeで動かしてるんだけど、なんとか修正しようとしてもcvLoadImageがNULLしか返さん >>630
>色空間
て
一般的にどんなのがあるのでしょう。
次元が多いもの、付加情報足せるものとか、あるのでしょうか。 >>631
カメラ制御はカメラのライブラリを使え。
OpenCVにあるのは基本的にwebカメラを最低限に動かす程度、ってか全てのカメラを制御するコマンドなんてエスパーじゃないと作れん。
カメラ制御コマンドに共通規格がある訳じゃないし。 cv::imread使えよ>>632
そんな化石みたいな関数使ってもいいことない
とはいえどうせ画像パスがサンプルコードのままとかいうオチだろうけど >>635
教授にUSBカメラのデバイス設定で露出とかそういうの変えられるでしょ?みたいに言われたんですが、制御、設定するプログラミングを別で組まない無理ですよね? 何したいのか知らんけどガンマ補正かけたりして補正するんじゃだめなんかい
せっかくのopencvだからそういう使い方しようよ
あくまでソフトだから、基本的にハードの制御は他でやるべき 「USBカメラのデバイス設定」はopencvじゃないでしょ
USBカメラのデバイス設定では変えれるし、例えばwindowsなら汎用の設定方法が用意されてるからそれ使えばプログラム上から設定できる >>636
レスありがとう
パスは変えてるよ、流石に
cv::Mat使ってみたんだけど俺の理解力不足なのかまったく使い物にならん
http://daily-tech.hatenablog.com/entry/2016/06/25/233203
このブログの3個目のプログラムなんだが、CVStereoGC〜ってやつはぜんぶGC→BMって変更加えるってことしかわからんかった
誰か詳しく教えてエロい人 何で2016年にIplimageとか使ってんだよ・・・w
matに書き換えるのきついならとりあえずデバッグしてみーよ
そもそもエラーメッセージは何? ちょっと調べてみたら
StereoGCちゃんは3.系になったときにリストラされてるねwドマーイ >>632 です
>>643
まじすか、2.4.13.2でもないっぽいんでGC系は削除されてるんすね…
>>644
はビルド通ったけど実行したら怒られましたね
>>641
の修正したけどエラー出るソース乗っけた方がいいですか?長いしクソコードです 意訳「まだエスパー検定試験した方がいいか?まだ続けようか?」 ステレオマッチングなんてそこら中にすぐ動くソースあるんじゃねえの
めんどくせえからキネクト買え hough変換調べてるとよく
http://i.imgur.com/obLDsYA.png
こういう画像見かけるけど
これってどうやって作成するのだ? >>649
バリバリに動くよ
もちょい調べたら
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11160807996
のソースで動いた
は 書いてること同じのような気がするんだが何が違うのか…
一同ありがとう
IplImageじゃないと動かないみたいだし, Matからの変換も上手くいかないし大人しく化石つかうわ
IplImageってOpenCV界隈じゃもうクソ規格なのかい? opencvのバージョン何?
クソ規格というか、もはや使われていない
過去の遺産的に一応残っているだけ状態 >>652
上にも書いてる通りに2.4.13.2だよ
3.x系が最新で遺産が多い2.4.x系がメンテ程度に更新されてるって認識でいいのかい?
最近触ったばっかだからまったくわからん 少し違う
3系でもまだ一応遺産は残ってる
ただ新しい関数ではもちろん使われないし、
StereoGCちゃんのように随時削除されていったりする だからどうしてもStereoGCちゃん使いたいから旧版使わないといけない!
とかいう場合を除いて基本的に最初に入れる時は最新版の導入がよいよ >>655
できればStereoGC使いたかったんだけど、これ以上頭混乱したくないし大人しくStereoBMで我慢しとく
丁寧な説明トンクス またわかんないことあったら来るよ Iplimageって過去の遺産なのか…
カメラから画像取得でずっとIplimage使ってたわ
2.4.9です 質問です
画像を二値化したとき、白の集団が二つあり、それぞれで認識させるってことは可能なのでしょうか? findcontoursやラベリング関数で出来そう なんで画素が連続してる前提なんだよ
集団が2つと既知ならk-meansを使えばいい opencv超初心者なんですけど、カメラによるリアルタイムの映像にping画像を透過することって出来ますか? 誤差拡散(たとえばFloyd-Steinberg)で二値化したい場合ってバカ正直に1ピクセルずつ読んで散らしていくしかないのか?
特にインタプリタだと処理時間がバカにならないんでOpenCVの機能を使って速く計算出来ないのかな
OpenCVで計算できないのであればMatのピクセル値とインタプリタの配列を高速に相互変換出来る方法でも良い
ruby-opencvでやっているけどRubyがピクセル値を計算している時間よりMatを読み書きしている時間の方が長いw mat.at(y,x)とBGRの罠はいい加減どうにかならないのか… コンピューターの画面は左上が原点になるよう設計されてるからな
タイムマシン発明して変えてこい BMPはわざわざ左下原点にしてるからややこしいことになる Mat::atと原点位置は関係ないと思うが。低い次元(x)が後の引数なのが違和感あるってことだろ?
Rとかだとxを省略したら行ベクトルを意味するとか合理性はあるんだが、OpenCVのatは
1引数で呼んだ時の動作はなんか適当だね。 CからCvMat@OpenCV2.4のピクセル値を読み書きしたいのですがどのようにしたらいいですか?
ググってもC++からやっている事例ばかり引っかかってCから操作している例を見つけられませんでした
dataあたりから出来そうな気もするのですが・・・ cv:Mat
の
平行移動サンプルコード
くださいorz Mat frame = cv::imread
とかやって、
frameの画像を下方向に1ピクセル移動、右方向に2ピクセル移動、
は、コーディングはどうなりますでしょうか。 いや、補完の処理をどうすんのかって話
はみ出た部分は消滅させるのか、移動した分だけ画像サイズがでかくなるのか
動いた穴の部分は黒塗りでいいのか
とか 同じ大きさが良いです
はみ出た部分は消失です。
動いた部分、黒塗りしたいです。 void hoge(Mat src, Mat &dst, int dx, int dy) {
Rect rect(max(0, -dx), max(0, -dy), src.cols-abs(dx), src.rows-abs(dy));
Mat sub = Mat(src, rect).clone();
dst = Mat::zeros(src.rows, src.cols, CV_8UC3);
Mat roi(dst, Rect(max(0, dx), max(0, dy), dst.cols-abs(dx), dst.rows-abs(dy)));
sub.copyTo(roi);
}
dxとdyが移動量、それぞれ画像の右方向、下方向が正ね あ、CV_8UC3はsrc.type()の方がよかったね
まあエラーとかも含めてその辺適当に。。
要するに、生き残る範囲を選択した後、黒塗りの画像上の移動先に貼り付けるだけ。 意外だったのは、
>Matなんだから→行列計算で移動のアフィン変換
だと思っていたのに、
Rectで解決なんですね。
基本的な考え方がわかったような気がします。
次には、回転を自分で作る、もしくは、ネットから拾ってくる予定です。 なんだよ実装の勉強じゃないのかよ!
それならopencv 平行移動 とかで何ぼでも出てくる気がする
てか回転まで必要なら最初からアフィン変換使えって話になってくるだろうしw
まあ頑張ってー >それならopencv 平行移動 とかで何ぼでも
出てこないです。
>アフィン変換使えって話
平行移動は、Rect処理にします。
void rot(Mat src, Mat &dst, double degree)
{
cv::Point2f center = cv::Point2f(
static_cast<float>(src.cols / 2),
static_cast<float>(src.rows / 2));
double scale = 1.0; // 拡大率
// アフィン変換行列
cv::Mat affine;
cv::getRotationMatrix2D(center, degree, scale).copyTo(affine);
cv::warpAffine(src, dst, affine, src.size(), cv::INTER_CUBIC);
}
回転が、反時計回転になるのが不思議ですね。
あと、degreeはラジアンじゃなくて、シータなんですね。 反時計回転になる原因わかりました。
>GetRotationMatrix2D
>正の値は,反時計回りの回転を意味します
不思議な流儀ですね。
ラップする関数でも、
この流儀に従った方がよいのか、
関数内でマイナスするか、、、
一応、自分の書きたかったことはこれで終了ですが、レスは延々と読み続けます。 >>691
高校で三角関数やらなかった?数学では0度がx軸右方向で反時計回りに回ってって90度がy軸上方向ってのが一般的じゃない?
もちろん、なぜx軸を上方向にとってy軸を右方向にとったり、x軸を右方向にとってy軸を下方向にとらなかったのか?ということを言い出したら「不思議な流儀」になるかもしれないが 滅茶苦茶初歩的な質問で申し訳ないんですが
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
をインクルードしてるのにcv::circle()が無いと言われるのはなぜでしょうか
imshow()やwaitkey()は使えます
OpenCVのバージョンは3.3.0です >>693
エラーメッセージを全部入れてくれないとなんともいいようがないが
インクルードしてるのに関数が見つからない場合は -lopencv_core とか
そんなのを指定し忘れてるとかかなぁ #include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
何するか知らんが、チュートリアルレベルならだいたいこの3つで事足りる。 再生動画(といっても、静止画の配列)のブレ補正処理は、
どういったメソッドでやられてますでしょうか? cv::Matの大きさを変える場合には、
>mt = cv::Mat(height, width, CV_8U).clone();
といった書き方でよいのでしょうか? 大きさを変えるとは?
元画像があって、指定した大きさに拡大・縮小したいという意味? バッファの大きさを変えるだけです。
cv::Mat mt(height, width, CV_8U);
と宣言時に大きさかけますけど、
宣言後にバッファサイズを変える方法が分からなくて。 大きさ変えるってのがうーん
今のデータを残しつつ新しい部分を追加するってこと? mt = cv::Mat(height*2, width, CV_8U); え、
>.clone
要らないんですね。
左辺と右辺でバッファの実態が共有されるのに、
次の行でメモリ解放されないんでしょうか。 新しい変数を使うのじゃダメなの??
既存の変数のサイズを変えないといけない場面が分からないんだけど おまえもだと思うけど、そこまで難しい話しても理解できないでしょ >>702
vector<int> vec(10);
vec = vector<int>(20);
というコードを書いたときに変数とオブジェクトの関係はどうなっているか、というレベルの話なので、C++をまずは勉強したほうがいい。 C++の勉強では、newと書くことになってるでしょ?
いやだから、どうなっているか教えて? >>706
newと書くことが必ずしも必要なわけではない。そして、コピーしたいときに=で済むか、cloneメソッド的なものを呼ばないといけないかは、クラスの作りによる。
続けるとスレチになるし、おそらく現状の理解からvectorの例までを理解するのにはそれなりにやりとりが必要になるような気がするので、詳しくはC/C++初心者スレッドみたいなところで質問してほしい。 つかマジでvectorのサイズ変えるくらいなら新しい変数作ればよくね? >>708
おまえ馬鹿じゃね?
おまえの書いてる時点で、vectorとのメモリ管理が違うことが明確になってるだろ。
それが分からないなんて、知能がたりない。 2chのプログラム関連はそんなもんだろ
それが分からないなんて、知能がたりない 知能がたりないかどうかは、一旦保留にしておいて、、、
vectorのメモリ管理とMatのメモリ管理が明確に違うんだから、
cloneいるかいらないか、の判断の道筋を明確にして欲しいです。
>mt = cv::Mat(height*2, width, CV_8U);
みたいな書き方をvectorでやると、
スコープ抜けると、実態が吹っ飛ぶと思うんですが。
Matは参照カウントか何か細工してますか? >>709
クラス変数にしてるので、そうできない局面で。 > mt = cv::Mat(height, width, CV_8U).clone()
これを分かりやすく展開したらこんな風に二度newした挙句memcpyまでするだろ
tmp = new byte[height*width*CV_8U];
ZeroMemory(tmp, sizeof(tmp));
mt = new byte[sizeof(tmp)];
memcpy(mt, tmp, sizeof(tmp);
メモリ管理連呼してるくせにメモリ管理まったくわかってないんじゃないか あ、そうなの?
.cloneしなかったら、
右辺はnewしないので、
スコープ抜けたら右辺の実態は消えるということ?
なら、.clone必要になるんですが。 Mat mt(height, width, CV_8U);
Mat new_mt(new_height, new_width, CV_8U);
mt = new_mt.clone();
これじゃダメなの?? クラス変数: Mat mt(height, width, CV_8U);
としたとき、
Mat new_mt(new_height, new_width, CV_8U);
mt = new_mt.clone();
で、cloneの有る無しで、メモリ管理は、どうなりますでしょうか。 どうも質問者はC++とJavaをごっちゃにしてる感あるな >>718
Mat mat(h, w, CV_8U);
mat2 = mat; //mat2.data は mat.data と共有されてるので mat2 を変更すると mat も変更される
mat3 = mat.clone(); //この時点でmat3の内容は mat と全く同じだがmat3はmat から独立してるので
//mat3 に何をしてもmat には反映されない >>710
vectorがどうしてcloneを呼ばなくていいか、Matでcloneを呼ばなきゃいけないときはどういうときか、そういうのを把握するためにC++のクラスの基礎的な理解が必要だって言ってるんだけど。
vectorがどうして呼ばなくていいか(どういう処理が実際に行われてるか)わかるようになればMatでどうすればいいかはソース読むか簡単な実験すればわかる
別に馬鹿にしてるわけでもないのに馬鹿だの知能が足りないだの短気なやつだな。 >>712
vectorでやってもおかしくならないよ。 >>722
おま、頭悪いなー。
vectorだと内容をコピー、
Matだと内容を共有。
動作の違いだと、なんどいったら、小一時間、、、 >>723
リファレンスやソース読めばその動作の違いはわかるよ
もちろん問題なく使い分け出来てるけど、それが出来ないのは頭が悪いからなのでは?w >>724
しつこいんだけど。
バカなの?市ぬの? 一連の流れで一番賢かったのは>>707だな。だめだコイツ Pythonで
import cv2
したら
SAMEプロブレムになるのでわ? >mat2 = mat; //mat2.data は mat.data と共有されてるので mat2 を変更すると mat も変更される
ここで、matがローカル変数で、mat2がクラス変数(つまり永続)のとき、
matがスコープ抜けた時って、
共有されているので、mat2の中身も変更(この場合、実態が破棄)されるということでしょうか。
それとも、そうならないようにOpenCVの中で工夫してくれているので、考えなくて良いのでしょうか。 >>728
内部実装で参照カウンティングが使われていてれば問題なく mat2 を
使い続けられるだろうけどウィロウガレージの中の奴らを信頼するべきじゃない
(基本ゴミ)なので危なそうな使い方は最初から避けるのが無難 了解です。
無駄なステートメントになったとしても、.cloneを使うことにします。
参照カウンティング〜ということは、OpenCVのベース部分にガベコレが何らか実装されているということですね。 だから最初から大人しくclone使えばいいって言ったやんけ
少しくらい量が多くなっても大して変わらん、メモリ管理ガーとか言ってる時間の方が無駄 いや、そのりくつはおかしい。
動作が分かったうえで、
余分な処理を明示的に書くのならおkですが、
そうでなければ、
メモリリークだらけ!!!
で、かつ原因不明!!!!!
調べようもない。 基本的なことを押さえようとしないで最終的な方法だけショートカットして知ろうとしてるみたいだし、とりあえず1発なんとなく動けばいいレベルのプログラムが出来ればいいって考え方なんじゃないのかな
そういうことが必要な状況もあるだろうから、否定はしないが 初心者です。
今png画像からHoughCirclesで円を検出しているのですが、png画像で検出出来なくてもjpg画像にすると円を検出出来ることが度々あるのですが理由など分かりますか?
画像処理で精度求めるなら可逆圧縮のpngなど使うのが良いと思ってたので混乱してます。 >>736
それぞれのファイル形式でimreadしたときに、どんなMatが出てきてるか確認してる?同じようなものならHough変換の結果もそんなに変わらないはず。 >>736
超能力でアレすると,アルファチャンネル付きのpngを扱ってるのが原因かも
OpenCVはアルファチャンネルの画像の扱いがおかしい(ことがある)。 ttp://rad-base.com/wp-content/uploads/2015/08/005_ph04.jpg
こういった感じで、ある範囲のピクセル値を持つ領域を、
外側(青)と内側(赤)に自動で分けたいのだけど、
OpenCVとか使うとできるものですか? ある範囲のピクセル値を持つ領域
↑
この定義によってはできるし、できない ロバスト性考慮しなかったらadaptiveThreshold使えば5分でできる >>742-744
ありがとうございます。
ttp://www.hatchobori.jp/asset/naizoushibou.gif
説明不足でしたが、要はこういうことをしたいわけで。
(内側と外側は、同じ範囲のピクセル値)
adaptiveThresholdという関数もありがとうございます。
OpenCVを調べてみようかと思います。 Xcode で openCV動かしの民なんだか
今回のアプデでOpenCV動かんくなった もちソースに変更なし
解決方法しってる博識おらんか? だいたい医療画像って確か周波数領域で扱うもんだったでしょ?
フーリエ変換してフィルタかけるとかの方がいいんじゃね?知らんけど >>746
1.前ソースに戻す
2.動けば解決で修正とかパッチなり待てばよい
3.動かなければアプデのせいじゃないのでドンマイ >>748
そ〜す変えてないから修正待ちするわ うんち サンクス >>749
そ〜すってOpenCV自体のソースのことじゃ無いの?
OpenCVを以前のバージョンに戻してみるって話でしょ。 それ
ついでに、望みはそんなにないけどまあヒントくらいはもしかしたら与えてやれるかも知れないから具体的にどう動かないのか教えてみて。 本探してもC++で解説してるやつばっかりやな pythonで解説書いてるやつで初心者にも分かりやすいやつ教えてくれ 割りとまじめに先にgoogleの使い方覚えたほうがいいと思うよ
覚えたら本買う気なんてなくなるから >>751
OpenCVのバージョンも何も、変わらず
ついこないだまでやってたXcodeプロジェクトをXcode 9.0にしたらエラー吐くようになったの
画像どこにうpすればいいかわからんからこれで勘弁して
https://drive.google.com/open?id=0B1gQp0SqZRp6UnZoVlVxcGZKYlU
ちょっとググったらシンボリックリンク貼り直せだの(やったけど治らん)
brew doctorしたら pruneしろだの 言われて打ったけど動かない…
学生なんでこれ使えないと割と困るんでヘルプお願いします…>< opencvなんも関係ないだろw
もっとちゃんとエラー見ろよ 卒研かーい
そして、プログラム君がimage not foundって思いっきり訴えてきてるけど? >>752
基本的には何も変わらないよ
あるとしたら、numpyの知識が若干欲しいくらい、それさえ覚えれば大体のことはどうとでもなる そのimage not found の訴えの退け方がわからnいっす ・・・何だろう・・・社会に出ちゃっていいのかな・・・? >>753
そう思っていた時期がわたしにもありました OpenCV使わずに自力で書いた方が早い気もするw spyder使ってるんだけどwebカメラ起動するコード書いて実行するとフリーズするんだけど軽くする方法教えて どうせそのコードが悪いんだろ。エスパーじゃなきゃわからん 何回かやったらカメラは起動できたけど顔は認識されないしグレースケールにもなってない、、 >>767
while で意図的に無限ループ作るやつは所々 sleep 入れると動くこともある カメラのfps内でsleep入れた方がいいよな
画像取得するまでひたすら無限ループをブン回すのは暴走の元 こういう糞なテストコードをまともに動く形に持って行くのって大変だよな ウェイトを入れないのもどうかと思うけど、
イベント通知やら何やらの仕組みが無いのも問題っちゃー問題ではあるんだよな 画像内に写る要素の微小領域を統合したい
どうすれば統合できるかな?
今はラベリングでやろうとしてるけどそれ以外の方法もあるのかな? >>776
バラバラに散らばった領域を太らせて一個の領域にするということ??
言ってることがよくわからないな >>777
隣り合ってるような微少領域要素を統合していって大まかなラベル分けをしたい 統合とラベリングって割と相反する概念だと思うんだけど こういう緑の線みたいな感じで領域統合して大まかなラベルつけたい
なんかないかな
どういうルールで小さいやつはどちらに分けるか決めるの? 特徴を決める尺度により過ぎるとしか。
画像みたいに近いものでまとめるなら物体毎の重心点でk平均取るとかでいいやろうけど。 ネットワークカメラの映像を流す(ストリーミング)Windowsフォームを作りたいです。
この分野は全くの初心者でざっと調べてみたらOpenCVを使うのがよさげなのでこちらで質問させてください。
そもそも、上記目的にはOpenCVが最適なのでしょうか?
取得した動画や画像で何かを処理するとかはないのでオーバースペックのような気もしています。
開発言語はVS2013のC#を考えています。 opencvに配信機能なんかあるのか?
配信だけならmsとかのツール使えばすぐだろ >>790
まずネットワークカメラの機種が固定でライブラリが有るかどうか
あればライブラリとC#だけで出来る
汎用のWebカメラとかだったら、Directshowをラップしたり、OpenCVSharpを使うが、最初が意外と面倒
OpenCVは画像処理がメインだけども、C#のWinFormにWebカメラライブラリが無い >>792
レスありがとうございます。
AXIS社製のカメラなのですが、ライブラリがなさそうな気がします。
> OpenCVは画像処理がメインだけども、C#のWinFormにWebカメラライブラリが無い
OpenCVで画像(動画)を取得してもWinFormでは扱えないということでしょうか? >>793
言葉足らずですいません、
OpenCVで画像を取得すれば、C#のWinFormで画像を扱えます
WinFormにはWebカメラのライブラリが無いので、何らかの外部ライブラリ(OpenCV等)が必要ってことです >>793
言葉足らずですいません、
OpenCVで画像を取得すれば、C#のWinFormで画像を扱えます
WinFormにはWebカメラのライブラリが無いので、何らかの外部ライブラリ(OpenCV等)が必要ってことです >>795
ネットワークカメラと通信して画像データを取り出すところは、OpenCVの範囲ではないような気がするな
AXISのVAPIXってAPIか、libvlcとか、gstreamerとか、Windows詳しくないんでよくわからないけどDirectShowとかWMFとか、その辺を触らないといけないと思う
ごく標準的なWebカメラであれば、OpenCVのVideoCaptureで開けたと思うけど、Skypeとかのカメラ一覧に出てくる範囲とかそのレベルが選べるだけだと思う。 >>785
ちなみに opencv superpixel でぐぐったらすぐ出てきたので
superpixel って言葉覚えておくといいです 手持ちのVC++2010でOpenCV導入しようと思ったのに
いくらプロジェクトの設定いじっても「外部参照が未解決です」みたいなエラーが出まくって
1週間くらい苦しんだ挙句VS2017をインスコして同じようにプロジェクト作り直したらあっさりエラー消えた
マジファック 失礼します。OpenCV(c++)を始めようとしているものですが早速詰まりました。
1.「brew install opencv3」で入れる
2. サンプルコードを丸コピ。`pkg-config --cflags opencv` `pkg-config --libs opencv`をつけてコンパイル。
3. すると「ld: library not found for -llibopencv_stitching.3.3.1.dylib」という文章が
4. pkg-config --libs opencvで調べたが確かにそこにlibopencv_stitching.3.3.1.dylibはある。どちてnot found?
こういった感じです。ネットで調べても有力な情報が見つからなかったのでわかる方いればよろしくお願いします LD_LIBRARY_PATHが指定されてないんだろ >>801
export LD_LIBRARY_PATH=/use/local/Cellar/opencv/3.3.1_1/lib
で試したのですが何も変わりませんでした。
ちなみにこのパスは>>800の4で出てきたやつです。 入れるだけなら楽なんですけどね・・・
ライブラリがnot foundのせいでネットにある導入方法が通用しなくて困る。特に変なことした覚えないのになぁ detectorでcomputeした際のdescriptが空の時(多分特徴点が見つからない時)、bfmatcherでマッチングするとエラーになるのですが、これを回避する方法はなんかいい案ありませんか?
カメラから連続フレームで処理してると特徴点がない時に止まります。
簡単な回避法としてcatchとかtry-except系で例外を捕まえるのは、こちらの都合的にあまり望ましくないので、出来ればアルゴリズムで何とかしたいのですが。 1フレーム前の特徴点も取っておいてとりあえず適用とか ver2.4だけどデフォルトで特定の色をラベリングする方法ない? デフォルトの意味が分からんけど1つの関数でってこと?
素直に色検出とラベリングに分けたらいいのに 顔認識ではなくて図形の認識を行いたいのですがどんな方法があるでしょうか?
認識する図形は形は同じで大きさが異なるものです。 Webカメラで顔を認識してそれをそのまま画像に保存するって言うのはopencvでは難しいですか? その辺に強いライブラリあったら教えてください すまん認識なら3行じゃ無理だな
検出なら出来る(3行とは言ってない) 顔認識はあるし保存するだけだから、
環境さえ揃っていれば数分で出来るな 認識がデフォであるわけねーだろ
ぽまえらの顔はフリー素材か何かなのか?w まあ顔認識のワードが先行してるしトーシロちゃんが間違うのも無理ないか
簡単に言うと顔がどこにあるのか見つけるのが検出、その顔が誰のものかが分かるのが認識 それとも何だ?一般物体認識としての顔認識の分類モデルがデフォで存在するんか?
まあそうだとしてもこのタスクの場合は検出とやってるレベル同じだけど 例えば↓から3.3.1落としたら、そんな中にhaarcascade_frontalface_default.xmlとか入ってるだろ
その調子だとおまえにかかったらこういうのは顔認識でもモデルでもないんだろうけどさ
https://opencv.org/releases.html haarlikeでやってるのは顔検出なんだよってに
カメラとかで顔のとこに四角形が出るのがそれ
顔の場所だけを見つけるのが検出
認識つったら文字認識とか言うみたいに何の文字かまで、顔で言えば誰の顔なのかまで言い当てないと認識にはならない まあこうやって講釈たれても実際一般人には顔検出のことを顔認識で通ってしまうから何も言えねえなのが辛いところ
まあでもせめてこういうスレくらいでは、ね? 誰の顔かってのは認識じゃなくて認証だと思ってたけど 認証ってのは、単に誰かじゃなくて、
「本人確認」して、さらに権限の認可とかにつなげることでしょ。
認識してもただ行動追跡するだけみたいなのは認証じゃない。 特に駅前の○○の指定(私鉄の沿線で鉄道会社の指定とかな)だとか何とか書いてあるとことか、
わざと一定期間でダメになったり、隣の歯の治療で穴が開通する様に細工するのが上手いからな
国民の金を回させる為に水道にフッ素入れない様にとか、おかしな国だよ カメラで物体を撮影して正確に物体の座標を特定したいです
今は物体にLEDを取り付けて閾値を用いて特定していますがより良い方法はありますか?
正確な座標と誤認識の少なさを両立させたいです そういうのは撮影環境や物体の動きとかの条件次第だからなんとも言えない
グリーンバックにして環境光も変えてってできるならそうすればいいし、
物体にLEDをつけれるほどならカメラにこだわらずレーザー測距視野に入れちゃってもいいと思う >>834
撮影中動く物は検出したい物体のみです
環境はどんな部屋でも特定できるようにしたいのでグリーンバックなどは厳しいです 動くのが物体だけだったら諧調落としてフレームの差分とるだけで終わりそう >>836
フレームの差分とるだけだと動く前と動いた後両方検出してしまう気がします
動く前を除けたら最高なんですが なんかもう無理そうな気がしてきた。今のLEDを輝度下げるとか小さいのにするとかそんなんで誤差小さくしたら? 動く物体が「存在しない画像」を基準にすればいいんじゃね? >>839
なぜか盲点でした
最初のフレームは背景だけでそれと差分取れば常に物体だけ追従できそうですね
LEDの閾値と組み合わせれば誤認識少なくなりそうです >>840
背景差分ってやつだな。実際には照明の大域/局所的
変動や熱などから生じる不規則ノイズがあるので何も考えずに
差分を取るとドッタンバッタン大騒ぎになる。
というわけでロバスト背景差分が必要になるわけ。 顕微鏡で取得した画像に対して、OpenCVでデータ処理をしようと思っています。
まずは、フォーカス合成をした全焦点画像を作ろうと思いますが、
OpenCVにはそれに向いている関数がありますか?
ご存知の方がいましたら、教えてください。 >>842
多数の画像があってある画像では右隅にピントが合ってるが
別の画像では真ん中にピントがあっていて…みたいのを全部
がっちゃんこして「ピントが合った部分」だけで新しい画像を作る
ということでしょうか そういうことだろ。標準機能じゃできなさそうだな
それだけやりたいってなら俺ならphotoshopに突っ込んで自動処理するツールつくるな。そっちの方が簡単かつ生成画像の品質もいい デコンボリューションってOpenCVに実装されてないよな?
ImageJとかの方が良さそう >>842
じゃないんだけど画像にフォーカスが合っているかとうかなんて判定出来るのかな。
特徴点検出を掛けて多い方がシャープさが高いとか?少なくとも同じ視点で撮影していることが保証されてないと厳しそう。
あとPhotoshopだと出来ると書いた人の理論も聞いてみたい 理論も何もphotoshop標準で機能あるから・・・ >画像にフォーカスが合っているかとうかなんて判定
出来る ググりました。
2014年にPhotoshopに「焦点領域」という機能が追加されてるんですね。
なるほど、複数の画像に焦点領域で取得した画像を重ね合わせれば作れるという事だったんですね。納得です。 OpenCVでの解決法に繋がらなくて申し訳ないです。 >>849
そうやってもいいけど、画像の整列かなんかのメニュー一発でできる memo
https://dotapps.jp/articles/qkzakqweffl1k5qp
http://www.gazo.co.jp/shohin_gazoum_vlfc.htm
http://www.eyepp.com/download/pdf/EasyFocus2.pdf
https://www.mitutoyo.co.jp/products/gazoukogaku/menu/gazosokuteikiso.pdf
http://www.faicha.com/vision/05focus/
ピントの合い具合
同じ対象を撮影していて、ピントがあった画像と合っていない画像を比べれば、
1つ1つの輝度差(となりの画素との明るさの差)が短距離で変化するものが、よりピントがあっていると言えそうです。
1ドット右に進むごとに10づつ輝度が変わる4ドットのエリアより、
一発で40輝度変わる2ドットのエリアはクッキリしています。
これを指数化すればよいので、何も考えず、
focus = (画素輝度 - 隣画素輝度)2乗
を画面全体で計算し、これをfocusindexとしています。
この数値、映像対象が変われば当然変化しますので、混在できないとか、
あと動画に使用できないといった問題がありますが、
静止対象のピントを合わせる場合などには結構使えます。
ピント位置を追い込む
上記focusindexをZ軸を少しづつ変化させながら求めると、正規分布のようなベルカーブを描きます。
今、Z0からZnの間にピントがあう位置があると仮定し、この区間を10分割なら10分割して、
Z軸を移動させながら画像を撮影、そのfocusindexを求めます。
すると、どこかの地点で最高値が求まるので、この前後2区間(3点)の範囲にピントがあう位置があるものとします。
これをまた10分割なりして、区間を狭めていき、最終的に、Z軸の分解能で再現できなくなるまで行えば、
ピントのあう画像となります。
問題点としては、縞模様などの場合、ベルカーブにある種の振動波のようなものが観測でき、
正確に合わせられないことがあるということ。
また、ピントの追い込み方が原始的で時間がかかることなどがあげられます。 どの画像がいちばんフォーカスあってそうかってのはすぐ求まるけど
1枚の画像に合成するとこで俺がやったら汚いモザイク絵になっちまうだろうなw
(ひと昔前の使えないパノラマ合成をさらに酷くした状態) >>842
それやるなら超解像顕微鏡を使った方がいいと思う >>856
電子顕微鏡の方がいいだろ
どっちも用途違いすぎてお呼びじゃないがw >>857
電子顕微鏡は画像のフォーカスがあってる部分の合成をやってないけど超解像顕微鏡はやってる
何で電子顕微鏡が出てきたのか分からん 質問失礼します。
カラー画像同士の差分を取るには、3原色に分けてから差分を取ればいいのでしょうか? 何の差分を取るかわからんが、
とりあえずならそうなるな >>861
それぞれ白黒にしたうえで白黒同士で差分 カラーのRGBの各要素には色がない
したがって白黒にする必要ないやろう 1.
python 3.6.3 で複数(20体ほど)の生物(オタマジャクシみたいに特徴が少ないもの)の追跡を差分法でやろうとしてるのですが、前のフレームの ある一つの動体と今のフレームの ある一つの動体が同じであるか求める方法ってありますか?
もしくは、他にいい追跡方法はありますか?
2.
追跡対象が方向転換するとき等、速度が落ちるときに認識が外れてしまうのですが、解決方法はありますか?
プログラミングも動画処理も初めてで、動体の座標を求めてバウンディングボックスを描くところまで作りました
自分で調べてみても、近くに別の動体が来たら認識がおかしくなるような方法しかなくて…
ベクトルから推測するにも、やっぱり最初に判別出来ないと意味がないだろうし…
5日くらい悩んでも分からなかったので、お願いします >>867
抜けました
カメラの位置は固定します
経時変化による光の影響はほぼ無いです >>867
フレーム間隔は?
サンプルの画像数枚貼れる? 2回分の検出で物体が重なった面積が大きい方が同じものとしちゃう
動きが小さい&被写体が大きいなら簡単かつ効果的だよ 返答ありがとうございます
>>869
フレーム間隔について、すみません、よく分からないので、やってる方法を書きます
cap.read()で3フレーム読み込んでグレースケールにしたあち、1フレーム目と2フレーム目、2フレーム目と3フレーム目の差の絶対値を取って、bitwise_andで白いところを抜き出してます
すみません、公表していいのか分からない画像なので、使いたい画像は乗せられないです…
一応それっぽい画像を挙げます
大きさもこんな感じで、真っ黒なやつが動きます
これを全部追跡します
https://i.imgur.com/km9auMT.jpg
>>870
そうしようと思って一度考えたのですが、画像みたいに移動した時、別の動体と重なってしまうと、別の動体同士が認識しあってしまうんです…
https://i.imgur.com/yra8iZt.jpg |1フレーム目 - 2フレーム目| and |2フレーム目 - 3フレーム目|
ってことかな バイオ系でopencv使うならこのサイト見るのがオススメですよ
お金を払えばオーダーメイドでプログラム作成もしてくれるみたいです
http://www.cellstat.net 募集してないのにうちによく作ってくれって依頼くるけど
1万2万で請け負ってもらえると思ってる奴が多すぎるw おまえらもインテルにお金払えよな。
なんでもタダだと思ってんじゃねーよ。 なんのために、どういう送金手段で、いくら、インテルに払えばいいんだ? なんのためにってやっぱりタダが当たり前だと思ってんのか。readmeすら読んでないとかありえん。
https://opencv.org/
[Donate]をクリックして進め。おまえは馬鹿だからまず1万ドル払え。 >>874
この人現役大学生なのに凄いよね
仮想通貨を使ったビジネスも始めてるみたいだし カラー動画を0と255の2値動画に変換して出力たのですが、実際出力された動画の画素を分析すると2値になっておらず、中途半端な値がかなり混ざっています
これはどうしようもないことなのでしょうか jpgというより、動画で出力しているのでmp4です
形式がまずいとかそういう事なのでしょうか
処理は間違っていない気がするのですが…(画素値には0と255以外入れていないので…) mp4はjpegと同じで劣化するだろ。フレーム単位で2値化なんかしたら、HDDいくつあっても足りんわ。 Python3.6.3で
Pyinstaller を使い.exeにして、コンソールに直接 動画ファイル名を打ち込んで動画処理しようとしていたのですが、動画ファイルだけ読み込んでくれません
何故なんでしょう?
webカメラはキャプチャ&処理してくれるし、.pyの状態だと動画ファイルも読み込んで目的通りに動くので、アルゴリズム自体は大丈夫なんだと思います
import cv2
import os
x = os.path.dirname(sys.argv[0])
os.chdir(x)
Device = input('file:')
if Device == '0':
Device = int(Video)
cap = cv2.VideoCaputure(Device)
ret ,frame = cap.read()
if not ret :
print('cannot read video')
cap.release()
cv2.destroyAllwindows()
スクリプトがあるディレクトリを指定し、動画も同じディレクトリにいれて、コンソール画面でファイル名等を打ち込み、キャプチャしようとしてます
そうすると、.exeだと
cannnot read video
と出力されてしまって… パスが悪いんだろ。ファイル名入れるときは絶対パスでいれたら? >>895
そう思って、一度動画ファイルの絶対パスを入れてやってみたんですが、それでもダメでした…
.pyとの違いって何や…エラーも出てないですし… >>894
895が言ってる問題かどうか切り分けるために動画が置いてある場所に(動画じゃない)jpgとか
置いて開けるか試したら? >>897
.exeの方でやってみたら、cvrColorがエラーしてるって出ました。
.pyだと、cannnot read videoです。
cv2.videocaputureをcv2.imreadに変えたら.exeでも.pyでも表示されました
絶対パスじゃなくても、
ファイル名.jpg
だけでもどちらでも開けました
videocaputureに問題があるのかな… exeなんて使わんから知らんけど.pyで動いてるのに.exeにしたら動かないならそのpyinstallerとやらが悪さしてるんだろ 実行ファイルにするなら普通にc++で書けよ、わざわざpythonで書く意味なくね >>899-900
ですかね…他のexe化モジュールも何かエラー吐きすぎて無理そうだったし、時間ももったいないから諦めます
python 入れてもらおう…
元々自分用に作ってて使ってたら、横で見てたプログラミングの知識の無い人が、それ欲しいといったから、配布しようとしたんですよね
プログラミングを知らない人って、あの文字列を見ただけで怯むから、アプリにして、後は数値やら動画ファイルだけを突っ込むだけにしようかと思ってまして opencvの動画周りってffmpeg使ってたと思うけど、pyinstallerではそのあたりのdllも一緒にまとめてくれるのかな。 >>901
そういうの時間と労力のの無駄になるよ。
口に餌を運んであげたら、その猫の糞も始末する
責任が生じるんだ。 普通にクラ側にpython環境入れるかc++で書くかの2択だろ
pyinstallerの中身調べるとかナンセンスすぎる >>901って理由出してるのにその二択にするのはナンセンスよ Python を入れて貰うことにしました
結構使えるプログラムだと思うから、これで我慢してもらおう
>>902
>>905
調べたらこれっぽいです…w
解決策もあったけど、opencvが何かマルウェアみたいでちょっと怖いですね…諦めたほうがいいみたいです
>>903
一応お世話になってるし、色々権力があるから媚び売りたい って言うのは内緒です
>>906
ですね…
最初、使い方を調べたら一瞬でできるみたいだったからやってみたはいいけど、opencv を入れたスクリプトには向いてないみたいです
他の同じような方の参考にもなれば つか業務でソフト開発して詰まったら5chで質問とか終わってるエンジニアだな 質問しようとするだけで思考がまとまるし、じっとしてるだけより何でも行動すべきでしょ ネットで質問して回答通りにやってうまくいったからOK
みたいな開発者になると最悪だが、
得た回答を元に公式のドキュメント読み直すなり
再度情報を整理して、正しく理解できるならそれでいい 5chなんて無能とキチガイしかいないからな
煽ったり無知装ったりなにしても情報とれりゃそれでいいんだよ レスポンスが一番早いのは5chだしな
煽られてもその中に正解が入ってたりするし まあ社会人として業務知識みたいなのをSNSで聞くのどうなんですかって話じゃないかな 業務知識ってなんだよw
社外秘のデータや方法出してるわけでもあるまいしどうでもいいじゃん エスパーするとおれが答えられない質問はするな、ということですな。 opencv でPCの特定のウィンドウをビデオキャプチャすることはできますか?
普通にバンディカムの方がいいかな… python版opencv で
I1 I2 I3
の3つの画像(全て.png)を一つのマルチTIFFファイルにしたいんですが、cv2.imwrite だと複数指定できなくて困ってます
何か方法はありませんか? tiffとか使ったことないけど
普通に3枚pngを出力してからtiffにしたらええやろ >>924
すみません、出力して、どう1ファイルにまとめるのかが分からないのです 「マルチtiff 変換」
↑
これでぐぐればいいだろ。それも分からないのか・・・ >>927
調べて見つからなかったから質問してるんです
どれもこれも読み込みのことしかなくて、マルチTIFFファイルとしての出力がないんです >>928
「マルチtiff 変換」でぐぐって一つ目のリンククリックして、開いたとこの先頭に
> (BMP,JPEG,JPEG2000,GIF,TIFF,PCX,FPX,PNG)からのダイレクト変換可
> 1つのファイルに複数の画像を収めることができるマルチページTIFFの一括作成に特化された
ってあるが、これ使ってもできないのか? >>926
コマンドラインでtiff変換するやつとか適当に使えばいいだろ
保存した3つのpngのパスは分かってるんだから
その3つを入力して適当にtiffで出力して終わり
コマンドライン操作?何それ?ってレベルならお勉強して下さいとしか・・ すいませんお教え願えませんでしょうか?
ガタガタのドッド絵画像の線をある程度直線で近似してなめらかな線にして
頂点位置の取得をしたいのですが
途中でつまずいてしまいました
やってみたのは
openCVのチュートリアルサイトにあったのを
ttp://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html
for (i,cnt) in enumerate(contours):
epsilon = 0.01*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)
img=cv2.drawContours(img,[approx],0,(0,0,0),0,lineType=cv2.LINE_AA)
をやってみたのですがなめらかな線はcv2.LINE_AAで出るのですが
元のドット絵みたいな線がガタガタな所と
きれいな直線になっているところがばらばらでした
そこでcornerHarrisで角になっているところを表示してみました
でもcornerHarrisででた頂点をdrawContoursで繋ぐ方法が分かりませんでした
この方法でいいのかもちょっとわからず・・・すいません、どうしたら良いのでしょうか? ちょっと意味が理解できなかった
なめらかな直線に近似したら頂点の座標なんて分からないと思うが >>937
説明へたくそですいません
ttps://imgur.com/a/ImM2E
オーバーに描くとこんな感じです。
元画像の白と黒の境界のギザギザ部分は滑らかな線にして(cv2.LINE_AAでできた)
形自体は直線で近似するので頂点ができるので
その頂点の座標も知りたいという感じです。 >>925
ゴミだったよ
その次に出た応用編は良かった >>938
どこが最終目標か分からないけど
その説明だけだとfindcontourとか使う方がお手軽そう 教えていただいてありがとうございます
フーリエ見てみましたがまだちょっと理解が追い付かないです
>>941
最終的にはアウトラインの真ん中の線をつなげれる座標が欲しいです。
今のところこんな感じです
https://imgur.com/a/D1ZdN
findcontourについて・・・これもアウトラインで境界がとれているので
難しいです。
モナーの絵でいえばギザギザしたのをスムーズな線にしたら
センターラインもとれやすくなるのでは(なんの確信もないですが)
と思っています。
もうほんと説明がへたくそすぎてすいませんとしか言えなくてすいません・・・ >>944
ttps://github.com/eiichiromomma/CVMLAB/wiki/OpenCV-Thinning >>944
ありがとうございます!!!
出来そうな気配が漂ってきました!!
https://imgur.com/XX9Efl8
センターラインを作った後に
findcontourを使ったので
輪郭線が二本になって頂点の座標の個数が二倍になってますが
まだよくわかんないですが入れ子になっているデータを
もうちょっとよく見たらなんとかなりそうな感じになりました。
ありがとうございます!! 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
052IV traincascadeを使ってるんだけどstage9くらいで落ちる。どうすればいいだろうか
ポジティブ画像が2000でネガテイブ画像が1000くらい >>950
-numPosを1750ぐらいにする
正しい枚数の九割いかないくらいの値
それでだめだったらnumNegを850かな
でどうだろうか スレチかもしれないんですが学校の課題でゼロ交差法のプログラムをかけというのがでているのですが、2次微分の正から負になっているところがゼロ交差というのはわかるんですが具体的にはどのようなアルゴリズムでやればいいのか教えて欲しいです。 初心者で申し訳ないんですけど
https://future-tech-association.org/2018/01/09/deep_learning_by_opencv_3/
このサイトのやり方を数値は変えましたがほぼ丸コピで機械学習やってみたんですが
TRAINING 1-stageに入ってから全く動かなくなりました
何が原因だと思いますか?
使った画像は100*100の正解不正解画像 50枚 22枚です 初心者が丸コピで動かないとか知らんがな
サイトが間違ってるか、コピペで余計なことをしたのかどっちかだろ 実行画面はこんな感じです
最後の行が出力されてから12時間放置しても変化しませんでした
不正解画像がおかしいのでしょうか?
https://i.imgur.com/PpRiGrl.png OpenCV:2.4.13.6
ビルド環境:Visual Studio 2010 Express
静的リンクで使用したいのですがOpenCVの各モジュールが使用しているライブラリの一覧とかどこかにないんでしょうか?
リンカがエラーを吐くたびに該当するライブラリを手動で探すのは結構大変です いったんDLLを作ってそれらがロードしているライブラリをDependencyWalkerで調べるって事?
やってみたけど静的リンクと動的リンクでリンクしなければならないライブラリファイルは違うしこの方法は上手くいかないようだ
というかこれ1個をリンクすれば一通りの機能が使えるみたいなライブラリファイルって作れないのかな
BUILD_opencv_world=ONはあり得ないファイルをリンクしようとしてビルドできないし OpenCVをどこまで使いたいのか知らんがvcpkgにopencvあったから試してみそじにー >>959
そもそも環境が古すぎる
VSとOpenCVを最新にしろ
Expressを使っているのなら両方無料だし 動的リンクにすると開発環境への依存が下がるのはどういう事なのだろうか
静的リンク
VS2010→リンクできる(期待通りに動作)
VS2008→std::やConcurrency::あたりのシンボルがないと怒られる
動的リンク
VS2010→リンクできる(期待通りに動作)
VS2008→リンクできる(期待通りに動作)
テストコード(test.c)
#include "opencv2/highgui/highgui.hpp"
int main(int argc, char *args[])
{
IplImage* i;
int r;
int p[]={CV_IMWRITE_PNG_COMPRESSION,9};
i = cvLoadImage(".\\IN.PNG", CV_LOAD_IMAGE_UNCHANGED);
r = cvSaveImage(".\\OUT.PNG", i, p);
cvReleaseImage(&i);
return 0;
}
静的リンクでビルド
cl /I ..\static\install\include test.c opencv_highgui2413.lib opencv_core2413.lib libjpeg.lib libpng.lib libjasper.lib libtiff.lib IlmImf.lib zlib.lib User32.lib /link /LIBPATH:..\static\install\x86\vc10\staticlib
動的リンクでビルド
cl /I ..\dynamic\install\include test.c opencv_highgui2413.lib opencv_core2413.lib /link /LIBPATH:..\dynamic\install\x86\vc10\lib
>>965
C APIで使いたいのですがOpenCV 3.x系は非推奨になっているので2.4系を使用しています
別のライブラリが要求しているためMSBT2017の導入は検討中ですがマシンの都合ですぐには無理です Ubuntu上でWEBカメラを3個同時にimshowしたいのですが、うまくいかず困ってます・・・
単一だとうまくいくのですが、2個以上画面出そうとすると応答なしまたは数秒表示して画面が更新しなくなるという症状です
エラーの内容は実行するたびに代わります・・・
ちなみにWindows上では3個問題なく表示できてます(なぜLinuxだけできない??)
ライブラリは標準(windows固有のものは一切なし)+OpenCVのみです
それぞれインスタンス化しスレッドも分けて動作させているのですが・・・
環境はVS2017Community、OpenCV3.2、言語はC++、開発はWindows、動作はLinuxで行ってます。
初心的な質問だったらごめんなさい video4linuxか?
腐ってるからそういうのできないw プログラミング初心者です
USBカメラから画像を取得して画像処理するプログラムを作っているんですが、カメラ制御はopencvでは詳細に設定できないそうですね
簡単なカメラ制御ライブラリはありませんか?
制御したい値は露出やフレームレートです
開発環境はvs2013Windowsで言語c ++、opencv2.4系です 確かに詰めていくとOpenCVのカメラ制御じゃ不十分な点も出てくるがプログラム初心者に関係ある話じゃない >>973
つまり露出とフレームレートはopencvで制御可能ってことでしょうか? できないよ
こんなとこで聞くよりドキュメント検索したら一発だろ WindowsならMediaFoundationでいいだろう。
もちろんカメラ製品によってできるできないはあるけど、専用アプリで露出等を
制御できる製品ならたいていMFでもいけるはず。 OpenCVのカメラ制御はあくまで汎用だからな
細かいカメラ制御が必要なら、仕様でカメラ制御のある専用カメラと専用ライブラリを使わないと 必要なのは露出やFPS制御程度と言っていて画像処理ですでにOpenCV使ってるだろうに
わざわざ他のライブラリ勧めるやつは初心者以下のアホかなんかか? >>977
どうしても外部で制御するのは却下なんです
>>980
できないってことでいいんですよね?
2.4系じゃ反応しませんでした、3.0系ならできるんですかね 意味わからんな。
> カメラ制御はopencvでは詳細に設定できないそうですね
> 簡単なカメラ制御ライブラリはありませんか?
> どうしても外部で制御するのは却下なんです
何がしたいのん >>980
そういう回答の貰い方好きじゃない
まあ何使っても無理なんじゃね >>982
専用アプリで制御するのかと勘違いしてました
MediaFoundationちょっと調べてみます >>983
質問がopencv2.4と気づかず質問者とそれ以外の区別もついてない初心者以下のアホかな 自分で調べてわからないようなやつに何を教えても無駄だろ 質問するなとはだれも言ってない
クレクレ君に教えることは何もない
どこまで自力でやって何が判らないのか誠意を見せろってこと >>979
>簡単なカメラ制御ライブラリはありませんか? そのくらい自分で調べて準備できないなら無理だから諦めろ このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1726日 23時間 8分 49秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。