问题描述
我目前正在进行图像分割项目,在成功预测掩码后我想做的是量化图像中的对象,如数量、区域直径等。
问题是我无法分离对象,我尝试了形态过滤器并使用不同的轮廓检索方法。
这是用于韧性断裂的 SEM 图像的掩码结果之一:
内外轮廓:
原图:
我错过了什么?有没有算法或方法可以使用 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)
输出:
您可以在 for
循环中单独访问每个轮廓的位置。