我正在尝试将最小边界框拟合到下面显示的每个“斑点”上。作为图像处理管道的一部分,我使用findContours在我的数据中检测轮廓,然后在发现的轮廓数组中绘制最小边界框。
最小边界框不是非常准确-有些特征明显被错过,而另一些则未能完全“封装”完整连接的特征(而是分割成几个小的最小边界框)。我已经尝试了不同的检索模式(如下所示的RETR_TREE)和轮廓逼近方法(如下所示的CHAIN_APPROX_TC89_L1),但没有找到我真正喜欢的东西。有人能建议一个更可靠的策略,以使用OpenCV Python更准确地捕获这些轮廓吗?
最小边界框不是非常准确-有些特征明显被错过,而另一些则未能完全“封装”完整连接的特征(而是分割成几个小的最小边界框)。我已经尝试了不同的检索模式(如下所示的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的建议,绘制所有可能的轮廓似乎可以涵盖所有可视特征。
cv2.drawContours(original, contours, -1, (0,0,255), 2)
来测试绘制所有轮廓。 - sturkmen