アプリ版:「スタンプのみでお礼する」機能のリリースについて

(再掲)
こんにちは
スキルが無いので資料見ながら苦労しています。

まずやりたいことは,
キネクト等で取得した物体断面画像(長方形物体,傾き有り)の最大長さと幅を取得することです。

opencvのサンプルプログラム
(1)「Square」の”findContours”で輪郭抽出を,
(2)「minarea」の”minAreaRect”で輪郭点群を内包する長方形取得
と考えたのですが,

格納変数が
(1)はvector<vector<Point>>
(2)はvector<Point>
ということでそのままはつかえません。(・・・よね?・・・)

(2)は単純にXYの座標データですが,
(1)は2次元配列で「 検出された輪郭.各輪郭は,点のベクトルとして格納されます.」
とOpenCV 2.2 C++ リファレンスにはありました。

点ベクトルで格納されていると言うことが今ひとつ理解できずにいます。2次元配列の
・1番目の要素は何か?
・2番目の要素は何か?
・格納されているx,yは何か?
わかりやすく解説して頂けると助かります。


併せて,
・上記を実現するためにvector<vector<Point>>をvector<Point>にうまく変換する方法
・他に良い方法があるよ
とかありましたらお願いします。

A 回答 (1件)

……うーんと、自分は OpenCV 全く知らないのですが、関数名で検索した結果以下のページが見つかりました。

Java なんですが。
http://blog.goo.ne.jp/nobotta50/e/030481c86ccf27 …
このページ最初の画像の直前のコードを見て C++ に置き換えると、どうも vector<Point> が輪郭一つ分のデータでその中にはその輪郭の頂点が入っている、そして画像内に輪郭は複数あるのが普通だからそれを vector にしてまとめている、ということのようです。

Kinect から画像データを持ってくるという事はノイズやらなんやらで自分の欲しい物体以外の輪郭も混ざると思うので、それらのなかから目的の輪郭を見つける必要があると思います。
そのあたりをどうしたらいいか……ごめんなさい、自分の知識ではここまでです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
バタバタしてお礼が遅くなりました。すいません

確かに,画像全体の中に複数の輪郭があるのが一般的ですよね。それが2次元配列で表現されている・・。なぜそこに気がつかなかったのか・・不覚。

スッキリしました。
ありがとうございます。

ちなみに
Kinect は,深さ方向でデータをカットすることで所望のデータのみ残るようにしていますので,輪郭を特定する作業はないようにしています。

またよろしくおねがいします。

お礼日時:2015/05/11 21:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!