有些彩色图像上面有网格,我们需要在不影响图像功能的情况下从图像上除去网格。 我们尝试了Canny边缘检测,Sobel过滤器,中点过滤器,中值过滤器,按位过滤器,去噪文件管理器等,并且尝试了几乎所有可能的方法,但无法获得适当的答案,图像变得模糊且网格化无法从图像中删除,图像的重要部分和有用功能会逐渐消失。
我们希望在不影响图像特征(不模糊)的情况下删除网格。
我们在下面提供了图片链接。
https://drive.google.com/open?id=14qKZv7pOeN6QbVmxZyk_TUu2usOekoWQ
答案 0 :(得分:0)
使用阈值或其他工具查找该网格和单词。如果网格出现在固定位置,则您可以手动创建蒙版图像。然后使用impaint将其删除
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