前提・実現したいこと
2つの円の中心座標を出力させたいです。
発生している問題・エラーメッセージ
2つの最小外接円の中心座標の値を出力する方法が知りたいです。 下のソースコードでは、1つの最小外接円の中心座標であれば出力することができます。
該当のソースコード
import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('test.jpg') img = cv2.medianBlur(img, 5) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ret,thresh = cv2.threshold(img, 127, 255, 0) frame1 = np.array(thresh) frame2 = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) contours, _ = cv2.findContours(frame2, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) for i, cnt in enumerate(contours): # 輪郭の面積を計算する。 area = cv2.contourArea(cnt) # 抽出する範囲を指定 if area > 100 and area < 50000: #最小外接円を計算する (x,y),radius = cv2.minEnclosingCircle(cnt) cv2.circle(img,(int(x),int(y)),int(radius),(0,0,255),3) plt.plot(x,y,marker='.') print("(x,y)", (x,y)) plt.imshow(img,"gray") plt.colorbar() plt.show()
2つというのは、それぞれ何に接する最小外接円なのでしょうか?
図があると分かりやすくなると思います。
――とはいえ、print("(x,y)", (x,y))をfor文の中に入れれば、cntがareaの条件を満たす限りいくつでも中心座標を出しそうなものですが…。
toast-uzさん
文だけだと説明不足でしたので、図を追加しました。
※図は一例としてきれいな白黒の円を取り上げています。
※実際はカラー画像で、ここまできれいな円ではないです。
やりたいことは2つの円にそれぞれ接する最小外接円です。
ベストアンサーの付け方がわからず、、。
fourteenlengthさんの、print("(x,y)", (x,y))をfor文の中に入れたらいくつでも中心座標を出力できました。ありがとうございます!
細かなことですが、
(x1,y1)=,(x2,y2)=のように中心座標ごとに番号を振りたい場合は、また上のソースコードに追加して定義することがありますよね...?
お手間ですが、そこもわかりましたら教えていただきたいです
「2つの図形があるtest.jpgに対しての図形ごとの最小外接円をもとめて表示できたのだが、円の中心座標を出力する際に1つしか表示されなくて困っている」という意味ですね。なぜ2つなのか?とか、2つ目の最小外接円そのものが求められないのか?とか、中心座標というのは「2つの円」の中点なのか?とか、読み取れませんでした。
toast-uzさん
ご指摘の内容はごもっともです。
図込みでさらに詳しく現状の問題をお伝えするべきでした。
またここで質問する機会がありましたら、それを踏まえた上で投稿します。
回答1件
あなたの回答
tips
プレビュー