前提・実現したいこと
下の画像に何角形がどのくらい含まれているのかを知るために、opencvで輪郭を近似し、何角形かを判別したいです。
よろしくお願いいたします。
発生している問題
コード自体は問題なく動いているのですが、例えば6角形と数えてほしいものを20角形と言われてしまったりと思い通りの結果にはなっていません。
そこで、
Python
1 approx_cnt = cv2.approxPolyDP(cnt, epsilon=0.005 * arclen, closed=True)
の、「epsilon」を変更すれば良いのではないかと考えたのですが、まずその考えはあっているでしょうか?
また、適切なepsilonを決定する方法を教えていただきたいです。(数値をいじってみたのですが、近似されすぎてしまったりもします)
該当のソースコード
付近のコードも載せておきます。
Python
1for i, cnt in enumerate(contours): 2 # 輪郭の周囲の長さを計算する。 3 arclen = cv2.arcLength(cnt, True) 4 # 輪郭を近似する。 5 approx_cnt = cv2.approxPolyDP(cnt, epsilon=0.005 * arclen, closed=True) 6 approx_contours.append(approx_cnt) 7 # 元の輪郭及び近似した輪郭の点の数を表示する。 8 print('contour {}: {} -> {}'.format(i, len(cnt), len(approx_cnt)))
試したこと
epsilonの数値をいじってみましたが、良い決定方法が分からず思い通りの結果にはなりませんでした。
補足情報(FW/ツールのバージョンなど)
Python3
回答2件
あなたの回答
tips
プレビュー