Я попытался немного поиграть с вашим изображением, но его разрешение и качество довольно плохие, поэтому результаты не являются оптимальными (если вы можете попытаться загрузить несжатое изображение, и я дважды проверю его)... В любом случае я думаю, что идея есть:
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