🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
OpenCV

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

Python

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

Q&A

解決済

2回答

2109閲覧

python 最小外接円について

puripuri1234

総合スコア10

OpenCV

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

Python

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

0グッド

0クリップ

投稿2021/01/28 21:10

編集2021/01/29 03:07

前回の続きです.
対象物体に対しての最小外接円についての質問です.
サイト(https://pystyle.info/opencv-structural-analysis-and-shape-descriptors/#outline__10)をもとに自分なりに書いてみたものの、物体とは別の場所に円が付きます.
##################
ここに囲まれているところが最小外接円のコードです.
##################

解決できる人がいらっしゃいましたら,回答よろしくお願いいたします.

<コード>

python

1import numpy as np 2import cv2 3from pylab import * 4 5 6 7THRESH_MIN, THRESH_MAX = (220, 255) 8THRESH_MODE = cv2.THRESH_BINARY_INV 9 10 11img = cv2.imread('C:/Users/user/resize/img/img_00254.jpg', cv2.IMREAD_GRAYSCALE) 12 13 14nitikaimg = cv2.threshold(img, THRESH_MIN, THRESH_MAX, THRESH_MODE)[1] 15 16nitikaimg2 = cv2.bitwise_not(nitikaimg) 17 18cv2.imwrite("C:/Users/user/resize/output.png", nitikaimg2) 19 20 21 22img = cv2.imread("output.png", cv2.IMREAD_GRAYSCALE) 23 24 25contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) 26 27 28max_contour = max(contours, key=lambda x: cv2.contourArea(x)) 29 30 31dst = np.zeros_like(img) 32 33cv2.drawContours( 34 dst, [max_contour], -1, color=255, thickness=-1, 35) 36 37cv2.imwrite("gan.jpg", dst) 38 39###################################### 40cnt = contours[0] 41(x,y),radius = cv2.minEnclosingCircle(cnt) 42center = (int(x),int(y)) 43radius = int(radius) 44circleimg = cv2.circle(dst,center,radius,(255,0,0),thickness=2) 45 46imshow(circleimg) 47###################################### 48cv2.imwrite("circle.jpg", circleimg) 49```

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

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

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

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

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

jbpb0

2021/01/28 21:30

pythonのコードの一番最初の行のすぐ上に ```python だけの行を追加してください また、pythonのコードの一番最後の行のすぐ下に ``` だけの行を追加してください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、回答されやすくなります
y_waiwai

2021/01/28 22:27

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

2021/01/29 03:08

素人で申し訳ございません 修正済みです。よろしくお願いします
guest

回答2

0

ベストアンサー

対象物体に対しての最小外接円

「対象物体」が何なのかわかりませんけども,雰囲気的に,

(x,y),radius = cv2.minEnclosingCircle( max_contour )

とすべき話に思えます.

投稿2021/01/29 04:10

編集2021/01/29 04:11
fana

総合スコア11985

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

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

puripuri1234

2021/01/29 19:26

解決できました! ありがとうございます!
guest

0

cnt = contours[0]

cnt = contours[2]
に変更してください。

色を変えた方が見やすいでしょう。

投稿2021/01/28 22:41

ppaul

総合スコア24670

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

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

puripuri1234

2021/01/29 03:09

やったところ円が消えました
ppaul

2021/01/29 06:08

円の外接円は円周そのものなので、見た目にはないように見えるのは当たり前です。 だから、外接円の色を変えた方が見やすい、と書いておきました。 色を変えずに確認したければ、 center = (int(x)+10,int(y)) とかに返れば、外接円が10ピクセル右に移動するので、描けていることは確認できますよ。
fana

2021/01/29 06:38

? 外接円を求める対象は円なのですか? (それ以前に,処理対象画像 "output.png" を質問者と共有できているような回答に見えますが……?)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問