如何在具有其他功能(如OpenCV中的划痕)的灰度图像中提取文本

2024-05-28 20:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图移除尽可能靠近图像的文本区域,因为我想提取表面上的划痕。这里的问题是,文本被激光刻在箱子上,箱子表面可能有划痕,我想检测一下。以下是一些示例(左侧是通过阈值创建的遮罩图像,中间的图像是我通过修复移除文本的图像,右侧是原始图像):

enter image description here

在这张图片中,我们看到左下角有一处划痕,文本所在区域有两处划痕。我对图像设置阈值,以便获得一个掩码,然后使用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最大的轮廓?但当有更大的划痕或其他东西时,我该怎么办呢。我有点困惑

这是一幅原始图像:

enter image description here


Tags: 方法图像文本imgthresholdmask阈值cv2

热门问题