OpenCVで楕円形のオブジェクトを認識したい。

OpenCVを使い、画像から白色の楕円型オブジェクトを切り抜くプログラムを考えています。

楕円オブジェクトの検出はほかのプログラムで行い、ここでは楕円オブジェクトの輪郭の切り抜きだけを行います。
HSVで画像を読み込んだ後、処理を重ねて大まかな輪郭を取得することはできましたが、光の反射等の映り込みにより、きれいな形を切り抜くことができません。

写真1枚目が加工なしの輪郭。
2枚目がapproxPolyDPをかけたあとの輪郭。
3枚目の赤い部分が不要な箇所です。

写真からわかるように本体から突出した部分だけ削除する方法を考えています。
何かアドバイスを頂けないでしょうか。
よろしくお願いいたします。

イメージ説明

イメージ説明

イメージ説明

Python

import cv2 import numpy as np img= cv2.imread("image.jpg")img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV) #検出範囲(HSV)white_min = (22,0,178)white_max = (210,51,255) img = cv2.inRange(img, white_min, white_max) #HSV範囲内で最大の輪郭を取得contours = cv2.findContours( img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0] max_cnt = max(contours, key=lambda x: cv2.contourArea(x)) #表面の凹凸を減らすmax_cnt = cv2.approxPolyDP(max_cnt, epsilon=0.001 *cv2.arcLength(max_cnt, True), closed=True) out = np.zeros_like(img)cv2.drawContours(out,[max_cnt], -1, color=255, thickness=-1)

コメントを投稿

0 コメント