【Intel】OpenCV総合スレ 5画素目【画像処理】
■ このスレッドは過去ログ倉庫に格納されています
OpenCVはインテルが公開したオープンソースのコンピュータービジョンライブラリ。
現在はWillowGateが開発している。
本家
http://opencv.willowgarage.com/wiki/
日本語資料など
http://opencv.jp/
前
【Intel】OpenCV総合スレ 4画素目【画像処理】
http://toro.2ch.net/test/read.cgi/tech/1329040627/ 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 って言葉覚えておくといいです ■ このスレッドは過去ログ倉庫に格納されています