Python:使用OpenCV将轮廓/边界提取到新图像中

时间:2016-11-30 13:15:31

标签: python opencv

我有一个二进制图像,有很多不同形状的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的边界框。如何分离这些已经解决了,我的问题是提取它们。谢谢

0 个答案:

没有答案