質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1372閲覧

OpenCVのcountour Areaでの面積についてと,表示された面積の合計について

kazu777

総合スコア2

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/08 01:09

編集2021/07/09 03:09

前提・実現したいこと

プログラミング初心者なため,わかりにくかったらすいません
質問は2つあります
1つ目は,counter Areaで表示される面積についてです
https://teratail.com/questions/49927
↑のURLで書かれているように,counterAreaで表示される面積は実際の面積よりも小さい値が表示されるのですが,実際の面積を表示するにはどのようにすればよいのでしょうか?

2つ目は,面積の合計です
下記のように画像から複数の輪郭を検出し,最後のprint(area)の辺りで各輪郭ごとの面積を表示することができたのですが,その輪郭ごとの面積の合計を求めるにはどうしたらよいのでしょうか?

言葉だけでなくコード等を用いて説明していただけると幸いです
よろしくお願いします

該当のソースコード

python

1import cv2 2import numpy as np 3#画像読み込み 4img = cv2.imread(r"C:\Users\2104101\Desktop\dog.png") 5 6#ネガポジ反転 7rimg = cv2.bitwise_not(img) 8 9cv2.imwrite(r'C:\Users\2104101\Desktop\d.png', img_contour2) 10 11#グレイスケール化 12gray = cv2.cvtColor(rimg, cv2.COLOR_BGR2GRAY) 13 14#2値化 15ret,th = cv2.threshold(gray,145,255,cv2.THRESH_BINARY) 16 17#輪郭検出 18contours, hierarchy = cv2.findContours(th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 19 20#小さい輪郭を削除 21contours = list(filter(lambda x: cv2.contourArea(x) > 1, contours)) 22 23#輪郭描画 24img_contour = cv2.drawContours(img, contours, -1, (0, 255, 0),5) 25 26#輪郭の面積を順番に出していく 27for i, cnt in enumerate(contours): 28 area = cv2.contourArea(cnt) 29 print(area)

補足情報(FW/ツールのバージョンなど)

python3系 anaconda opencv を使用

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2021/07/09 04:08

> 1つ目は,counter Areaで表示される面積についてです ・あなたが示しているリンク先の話 ・あなたの1つ前の質問:https://teratail.com/questions/347909 で必要な話は出そろっていると見えますが,何が問題点なのですか? あなたが言うところの「実際の面積」の定義がどのようなものなのか不明ですが, contourAreaの結果があなたの定義と合わないのであれば,単にこれを使わなければよいだけではないのですか? 「実際の面積」とは,前の質問についている回答群で求まる面積と異なる量なのですか?
fana

2021/07/09 04:09

> 2つ目は,面積の合計です 単純に加算すればよいだけではないのですか? (例えば対象が3個あって,それらの面積が{10,2,4}であれば,「合計」とは 10+2+4 ではないのですか?)
kazu777

2021/07/09 08:14

すいません Counter area ではなくfindcounter のほうでした あとは私が記載したUrLの通り,findconterで検出される面積が実際の面積よりも小さくなるため,小さくなる問題をどう解決したらよいかというものです 2個目に関してはその通りなのですが,コード等で教えてもらえると幸いです 初心者過ぎてすいません
fana

2021/07/09 08:23

findContourの結果データからでは所望の結果が得られない,ということなのであれば,それを使っていても仕方ないのではないでしょうか. 前回の質問では, 「2値化結果から画素数を数えればよくね?」的な(findContourを使わない)回答も出ていますよね. もしも「実際の面積」というのが「2値化結果の画素の個数」なのであれば,この回答の話が使えるのではないでしょうか. (逆に言えば,そういう話だとダメなのだとしたら,何がどう問題になるのか? というあたりの話が無いと,誰にも他のより適切な方法を示すことはできないように思います) ※コードについては,私はpython使いではないので示せないです.これについては示せる人の登場を待っていただくしか.
fana

2021/07/09 08:28

参考情報(になるか?): OpenCVには connectedComponents というラベリング処理の実装もあるようです. findContourとはまた違った結果が得られるのではないかな,とか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問