【发布时间】:2018-08-28 08:00:11
【问题描述】:
我有带有表格的 this 图像,我想从图像中删除表格结构,以便它可以更有效地与 Tesseract 一起工作。我使用以下代码在表格(和单个单元格)周围创建了一个边界,以便可以将其删除。
img =cv2.imread('bfir.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
img1 = np.ones(img.shape, dtype=np.uint8)*255
ret,thresh = cv2.threshold(gray,127,255,1)
(_,contours,h) = cv2.findContours(thresh,1,2)
for cnt in contours:
approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)
if len(approx)==4:
cv2.drawContours(img1,[cnt],0,(0,255,0),2)
这会在桌子周围绘制绿色线条,如this 图像。
接下来,我尝试了cv2.subtract方法从图像中减去表格,有点像这样。
final_img = cv2.subtract(img1, img)
但这并没有像我预期的那样工作,并给了我一张灰度图像,里面还有一张桌子。 Link
虽然我只想要删除表格的黑白原始图像。我是第一次使用 OpenCV,所以我不知道我做错了什么,我很抱歉发了这么长的帖子,但是如果有人可以帮助我解决这个问题,或者只是为我指出正确的方向删除表,将非常感谢。
编辑: 正如RobAu 所建议的那样,它也可以首先简单地绘制白色轮廓,但我不知道如何在不丢失预处理阶段的其余数据的情况下做到这一点。
【问题讨论】:
-
如果您有兴趣,我有一个代码可以检测矩形并将它们制作成自己的图片
-
这会很有帮助,但我想完全摆脱这里的表格,而不是把它变成单独的图像。无论如何请分享它,我可以尝试修改它以满足我的需要:)
-
我会将其发布为答案,但您不必将其标记为已回答,主要用于格式化。我对开放式简历还不太熟悉,所以很遗憾这是我能做的最好的事情
-
为什么不在原图上画出白色的轮廓呢?
-
我绝对可以做到,但我承认到目前为止的大部分工作都是从这里完成的(就像一个真正的开发人员一样),恐怕我不完全了解如何绘制轮廓而不删除剩余数据,就像现在一样 (example)。 (我猜它与阈值有关,即“模糊”背景数据以绘制轮廓)
标签: python opencv image-processing tesseract