プロが教える店舗&オフィスのセキュリティ対策術

OpenCVによる面積算出

現在OpenCVを使用して、2値化した画像を取得し保存。そして取得した画像を読み込み白い部分の面積を求めるプログラムを作成中なのですが、正直分かりません;;

どのように作ればいいのか、OpenCvのプログラミングブックやGoogleで検索しても、自分で作成するに至れない状況です。もしよろしければ、アドバイス等をいただけると幸いです;;

A 回答 (2件)

こんばんは.



「白い部分の面積」というのは,「(連結している)白い部分の(個別の)面積」であると
仮定して回答させて頂きます.
(でなければ,単純にカウンタ変数を用意した上で,画像を左上の画素から右下の画素まで読んでいって,値が0だったら無視,255だったらカウントアップ,で済む話です)

それで,「連結している白い部分の個別の面積」を求める処理はラベリング処理といいます.
わかりやすい概念図が下記ページに載っています.
http://imagingsolution.blog107.fc2.com/blog-entr …

また,OpenCV用のラベリング関数を自作して公開してくれている人が居ます.
http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/ …
勉強のためではなく,急ぎならこちらを利用させてもらっても良いでしょう.

以上,参考になれば幸いです.
    • good
    • 1

単純に画像全体の中から白い部分の面積(輝度値が0で無い部分の面積)を求めるのなら、cvCountNonZero関数を使うと一発で求められます。


ただし、OpenCV.jpにも書かれているように、この関数はシングルチャンネル(モノクロ画像)か、COI(処理するチャンネルが指定)されたマルチチャンネル(カラー画像)に対応なので、ご注意下さい。

それとも、IplImageの輝度データを直接参照したいのなら、過去に同じ様な質問があったので、そちらが参考になると思います。
http://okwave.jp/qa/q4743115.html

もしくはkirinomaさんの回答のように、連結成分(ラベリングした領域)の面積を求めたいのなら、Googleで『cvFindContours 面積』で検索してもらうと参考になるページが見つかると思います。
http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL …

以上、参考まで。
    • good
    • 0

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