以下に示すこれらの「斑点」のそれぞれに最小境界ボックスを合わせようとしています。画像処理パイプラインの一部として、findContours を使用してデータ内の輪郭を検出し、検出された輪郭の配列を指定して最小境界ボックスを描画します。
最小境界ボックスはあまり正確ではありません。一部のフィーチャは明らかに見落とされていますが、他のフィーチャは完全に接続されたフィーチャを完全に「カプセル化」できません (代わりに、いくつかの小さな最小境界ボックスに分割されます)。検索モード(以下に示す RETR_TREE) と輪郭近似方法(以下に示す CHAIN_APPROX_TC89_L1) をいじってみましたが、本当に気に入ったものを見つけることができませんでした。OpenCV Pythonを使用してこれらの輪郭をより正確にキャプチャするためのより堅牢な戦略を誰かが提案できますか?
import numpy as np
import cv2
# load image from series of frames
for x in range(1, 20):
convolved = cv2.imread(x.jpg)
original = convolved.copy
#convert to grayscale
gray = cv2.cvtColor(convolved, cv2.COLOR_BGR2GRAY)
#find all contours in given frame, store in array
contours, hierarchy = cv2.findContours(gray,cv2.RETR_TREE, cv2.CHAIN_APPROX_TC89_L1)
boxArea = []
#draw minimum bounding box around each discovered contour
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 2 and area < 100:
rect = cv2.minAreaRect(cnt)
box = cv2.cv.BoxPoints(rect)
box = np.int0(box)
cv2.drawContours(original,[box], 0, (128,255,0),1)
boxArea.append(area)
#save box-fitted image
cv2.imwrite('x_boxFitted.jpg', original)
cv2.waitKey(0)
** 編集: Sturkman の提案によると、すべての可能な輪郭を描画すると、視覚的に検出可能なすべての機能がカバーされるように見えました。