如何使用python分离图像中的触摸形状

问题描述

我目前正在进行图像分割项目,在成功预测掩码后我想做的是量化图像中的对象,如数量、区域直径等。

问题是我无法分离对象,我尝试了形态过滤器并使用不同的轮廓检索方法

这是用于韧性断裂的 SEM 图像的掩码结果之一:

enter image description here

内外轮廓:

enter image description here

enter image description here

原图:

enter image description here

我错过了什么?有没有算法或方法可以使用 python 解决这个问题?

解决方法

您可以尝试扩大和侵蚀您的图像,就像这样:

import cv2
import numpy as np

img = cv2.imread("image.jpg")

def process(img):
    img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    img_blur = cv2.GaussianBlur(img_gray,(11,11),1)
    img_canny = cv2.Canny(img_blur,200,0)
    kernel = np.ones((7,7))
    img_dilate = cv2.dilate(img_canny,kernel,iterations=1)
    return cv2.erode(img_dilate,iterations=1)

def get_contours(img):
    contours,_ = cv2.findContours(process(img),cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
    for cnt in contours:
        area = cv2.contourArea(cnt)
        if  500 < area < 10000:
            cv2.drawContours(img,[cnt],-1,(0,255),-1) 

get_contours(img)
cv2.imshow("Image",img)
cv2.waitKey(0)

输出:

enter image description here

您可以在 for 循环中单独访问每个轮廓的位置。