我正试图移除尽可能靠近图像的文本区域,因为我想提取表面上的划痕。这里的问题是,文本被激光刻在箱子上,箱子表面可能有划痕,我想检测一下。以下是一些示例(左侧是通过阈值创建的遮罩图像,中间的图像是我通过修复移除文本的图像,右侧是原始图像):
在这张图片中,我们看到左下角有一处划痕,文本所在区域有两处划痕。我对图像设置阈值,以便获得一个掩码,然后使用inpaint
方法。这很好,但我只想为文本做修补,而不是划痕
这是我进行修补的方法:
def MaskOutMarking(self, img):
# Binary threshold image
mask = cv2.threshold(img, 150, 255, cv2.THRESH_BINARY)[1]
# Remove small noise
inp_mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE,cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)))
cv2.imshow('Mask', mask)
cv2.waitKey(0)
# Dilate mask
inp_mask = cv2.dilate(inp_mask,
cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (15, 15)))
# Inpaint
dst = cv2.inpaint(img, inp_mask, 15, cv2.INPAINT_NS)
#cv2.imshow('Mask', inp_mask)
#cv2.waitKey(0)
return dst
我想可能提取轮廓,然后过滤划痕,但我不知道如何用它删除非文本特征。也许能得到x最大的轮廓?但当有更大的划痕或其他东西时,我该怎么办呢。我有点困惑
这是一幅原始图像:
目前没有回答
相关问题 更多 >
编程相关推荐