囲み円は単純な塗りつぶしの形にしたいと思います。私はopencvとpythonを使っています。私はminEnclosingCircle関数を使用します。しかし、私は奇妙な結果を得るいくつかの例には:OpenCV(Python)を使用したminEnclosingCircleの奇妙なセンター
センターの形状を中心としたことになっている、と円が形に触れることになっています。これは明らかにそうではありません。
興味深いのは、中心が90度回転した同じ写真ではないことです。シフトが少なくなります。ローテーションが最小包囲円の中心を変更する理由はありません。これは、この関数が盗聴されていることを意味し、代替が必要です。私はただ円の中心が必要です。ここで
私のコードの小型版である:
import cv2
import numpy as np
img = cv2.imread('testodd3.jpg',cv2.CV_LOAD_IMAGE_COLOR)
pic = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(pic,127,255,0)
thresh = cv2.bitwise_not(thresh)
contours,hierarchy = cv2.findContours(thresh, 1, 2)
cnt = contours[0]
(x,y),radius = cv2.minEnclosingCircle(cnt)
center = (int(x),int(y))
radius = int(radius)
cv2.circle(img,center,radius,(0,255,0),3)
cv2.circle(img,center,3,(255,255,0),3)
cv2.drawContours(img, [cnt], 0, (0,0,255), 3)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
私は同様の問題を見ましたが、解決策は、C++ライブラリを使用しています:Unexpected results of minEnclosingCircle in OpenCV
はバグが提出されたようだ、プルリクエストはそれを修正しようとしましたが、それはテストを破ったので、その後のプルはキャンセルされました。多分再開する必要があります。 [GitHub](https://github.com/opencv/opencv/pull/2758)のディスカッションを参照してください。 –
私にこれを指摘してくれてありがとう。バグレポートには私が気づいた大きな円が書かれていますが、幸いにも私は中心にしか興味がないので私にとっては問題ではありません。しかし私の場合、センターは間違っています。ディスカッションにメッセージを追加し、何が起こるかを見ていきます。 – Tom
@Tom私の答えがあなたの質問に十分かどうかを確認してください –