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

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

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

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

Q&A

解決済

2回答

14586閲覧

pythonでの面積計算

nosumori

総合スコア6

Python

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

0グッド

1クリップ

投稿2019/09/02 07:36

編集2019/09/02 08:27

前提・実現したいこと

pythonでクリックした4つの座標を元にその内側の面積を測定するプログラムを作りたいです。
4点の座標を選択するまでは完成したのですが、その先の面積の計算のためのコードが分かりませんので教えていただきたいです。よろしくお願いします。

該当のソースコード

import cv2 import numpy as np def select_point(event, x, y, flags, param): """変換元画像の4点を選択する。 """ global is_complete if event == cv2.EVENT_FLAG_LBUTTON: cv2.circle(img, (x, y), 3, (255, 0, 0), -1) points.append([x, y]) print(x, y, len(points)) if len(points) == 4: is_complete = True # 4点選択した場合、フラグをたてる。 img = cv2.imread('DSC01054.png') # 画像を読み込む。 is_complete = False # 4点の選択が完了したかどうか points = [] cv2.namedWindow('input') cv2.setMouseCallback('input', select_point) while True: cv2.imshow('input', img) cv2.waitKey(1) if is_complete: cv2.destroyWindow("input") break

補足情報

使用しているのはpython 2.7です。

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

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

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

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

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

y_waiwai

2019/09/02 07:39

このままではコードが読めないので、質門を編集し、<code>ボタンで、出てくる’’’の枠の中にコードを貼り付けてください
t_obara

2019/09/02 07:48

数学的に4点からその面積を求める方法をググれば良いと思いますが、具体的にどのような点がわからないのでしょうか。
nosumori

2019/09/02 08:33

ソースコードを改めて記入させていただきました。 ご指摘ありがとうございました。
nosumori

2019/09/03 04:01

t_obaraさま 数学的に四点から面積を求めるというのは、縦横の長さを掛ける公式でしょうか。 わからない点は、四点を指定した後に、そこから点同士の距離を調べるやり方が分かりません。 そして、画像の中での四点の面積測定をしたいのですが、画像の中にメジャー(10㎝ほど)があり、その距離を㎝に換算したいです。 言葉足らずで大変申し訳ございませんでした。 よろしくお願いいたします。
guest

回答2

0

ベストアンサー

回答

cv2.contourArea をお使いください。
この関数は3点以上で構成されるポリゴンの面積を求められます。
求積には グリーンの定理 を使用しています。

コード

python

1# encoding: utf-8 2import cv2 3import numpy as np 4 5 6def select_point(event, x, y, flags, param): 7 """変換元画像の4点を選択する。 8 """ 9 global is_complete 10 if event == cv2.EVENT_FLAG_LBUTTON: 11 cv2.circle(img, (x, y), 3, (255, 0, 0), -1) 12 points.append([x, y]) 13 print(x, y, len(points)) 14 15 if len(points) == 4: 16 is_complete = True 17 18 19img = cv2.imread('image.png') # 画像を読み込む。 20is_complete = False # 4点の選択が完了したかどうか 21points = [] 22 23cv2.namedWindow('input') 24cv2.setMouseCallback('input', select_point) 25 26while True: 27 cv2.imshow('input', img) 28 cv2.waitKey(1) 29 30 if is_complete: 31 cv2.destroyWindow("input") 32 break 33 34area = cv2.contourArea(np.array(points)) 35print("area", area)

参考文献

投稿2019/09/02 08:30

tiitoi

総合スコア21956

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

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

nosumori

2019/09/06 05:33

ご回答ありがとうございます。 解決することが出来たため、ベストアンサーにさせていただきました。 ありがとうございました。
guest

0

この考え方でコード作れませんか?
複数座標で囲まれる多角形の面積

投稿2019/09/02 08:30

Ryupe

総合スコア426

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

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

nosumori

2019/09/06 05:29

ご回答ありがとうございます。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問