我有一个二进制图像,有很多不同形状的blob。我使用python和OpenCV,我得到了旋转的边界框和#34;更准确的"轮廓。这是代码。 Mult2是二进制图像,"灰色"是一个不同名称的图像(坏,我知道)。
# "rect" gives bounding box centroid coordinates, width/length, angle
ret, contours, hierarchy = cv2.findContours(gray,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
if 5<cv2.contourArea(cnt)<50000:
# Draw smaller objects with rectangular boxes (note that I actually draw all objects and not only the small ones atm)
rect = cv2.minAreaRect(cnt)
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(mult2,[box],0,(0,0,255),2)
if 1000<cv2.contourArea(cnt)<500000:
# Draw bigger objects with help from perimeter lenght ish something
epsilon = 0.004*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)
cv2.drawContours(mult2,[approx],0,(255,0,0),2)
结果是This image
在此示例中,绘制了边界框和轮廓,但这与atm无关。我想要的是绘制或提取边界框(蓝色),结果是边界框&#34;取代&#34;斑点。我想能够用轮廓(红色)做同样的事情并将它们放在同一个图像中(因此对于某个blob我想要的是边界框或轮廓)。我该怎么做?
编辑:此处无法看到,但在原始二进制图像中,存在边界框彼此重叠的位置。因此,例如,一个斑点可以具有大的U形,并且有时可以说在U内存在斑点。在那种情况下,我想要U的轮廓和内部blob的边界框。如何分离这些已经解决了,我的问题是提取它们。谢谢