从彩色图像中删除网格

时间:2019-06-04 07:13:17

标签: python-3.x opencv

有些彩色图像上面有网格,我们需要在不影响图像功能的情况下从图像上除去网格。 我们尝试了Canny边缘检测,Sobel过滤器,中点过滤器,中值过滤器,按位过滤器,去噪文件管理器等,并且尝试了几乎所有可能的方法,但无法获得适当的答案,图像变得模糊且网格化无法从图像中删除,图像的重要部分和有用功能会逐渐消失。

我们希望在不影响图像特征(不模糊)的情况下删除网格。

enter image description here

我们在下面提供了图片链接。

https://drive.google.com/open?id=14qKZv7pOeN6QbVmxZyk_TUu2usOekoWQ

2 个答案:

答案 0 :(得分:0)

使用阈值或其他工具查找该网格和单词。如果网格出现在固定位置,则您可以手动创建蒙版图像。然后使用impaint将其删除

enter image description here

img = cv2.imread('you_scan.png')
mask = cv2.threshold(img, 210, 255, cv2.THRESH_BINARY)[1][:,:,0] # if threshold can not achieve, use other tools for fixd position grid mask.
dst = cv2.inpaint(img, mask, 7, cv2.INPAINT_NS)

答案 1 :(得分:0)

我尝试过处理您的图像,但是它的分辨率和质量都很差,因此效果不是最佳的(如果您可以尝试上传未压缩的图像,我会对其进行仔细检查) ... 无论如何,我认为这个想法是存在的:

    img = cv.imread(path_to_img)
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)

    #use any good value that extract the grid, 15 should be good enough
    res, mask = cv.threshold(gray, 15, 255, cv.THRESH_BINARY_INV) 

    #just to better highlight the mask
    kernel = np.ones((3,3), np.uint8)
    dilation_image = cv.dilate(mask, kernel, iterations=2)

    dst = cv.inpaint(img, dilation_image, 15, cv.INPAINT_TELEA)
    #dst = cv.medianBlur(dst, 5) #optional, to check if needed
    cv.imshow("output", dst)

inpaint方法的参考: https://docs.opencv.org/3.4.0/df/d3d/tutorial_py_inpainting.html