Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 表格图像中的文本检测_Python_Opencv_Computer Vision_Ocr - Fatal编程技术网

Python 表格图像中的文本检测

Python 表格图像中的文本检测,python,opencv,computer-vision,ocr,Python,Opencv,Computer Vision,Ocr,让我先说我不擅长这个(发帖问题),我是问题主题的初学者 明白了这一点,我正在进行一个OCR项目,该项目将检测姓名和数字。这篇文章的主题只涉及名字。目前,我正在尝试从图像中的表中提取名称 我的方法是处理一个图像并获得名称的边界框,然后我有两个想法,如何在不指定名称在图像中的位置的情况下自动处理其他图像 我已经设法在“名称”列上放置了边界框,但出于某种原因,它还检测每个单元格中名称字符周围的轮廓,我不得不删除很多数据,因为这对其他人来说是私人的,但我确实有使用它的权限 我有两个问题: 在角色周围检测

让我先说我不擅长这个(发帖问题),我是问题主题的初学者

明白了这一点,我正在进行一个OCR项目,该项目将检测姓名和数字。这篇文章的主题只涉及名字。目前,我正在尝试从图像中的表中提取名称

我的方法是处理一个图像并获得名称的边界框,然后我有两个想法,如何在不指定名称在图像中的位置的情况下自动处理其他图像

我已经设法在“名称”列上放置了边界框,但出于某种原因,它还检测每个单元格中名称字符周围的轮廓,我不得不删除很多数据,因为这对其他人来说是私人的,但我确实有使用它的权限

我有两个问题:

在角色周围检测到轮廓的原因可能是什么

您认为我应该如何自动化提取过程,因为我目前必须以静态方式指定边界的位置

使用的代码提供:

import cv2
from matplotlib import pyplot as plt
import numpy as np

file = r'Corrected_images\table_deskew3.png'
table_image_contour = cv2.imread(file, 0)
table_image = cv2.imread(file)

ret, thresh_value = cv2.threshold(table_image_contour, 180, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((5, 5), np.uint8)
dilated_value = cv2.dilate(thresh_value, kernel, iterations=1)

contours, hierarchy = cv2.findContours(dilated_value, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

for cnt in contours:
    x, y, w, h = cv2.boundingRect(cnt)
    # bounding the
    if 842 < x < 2215 and 1288 < y:
        table_image = cv2.rectangle(table_image, (x, y), (x + w, y + h), (0, 0, 255), 3)
        roi = table_image[y: y + h, x: x + w]
        #plt.imshow(roi)
        #plt.show()
plt.imshow(table_image)
plt.show()
cv2.imwrite('target.png', table_image)
cv2.namedWindow('detectable', cv2.WINDOW_NORMAL)
导入cv2
从matplotlib导入pyplot作为plt
将numpy作为np导入
file=r'Corrected_images\table_deskew3.png'
表\u图像\u轮廓=cv2.imread(文件,0)
表_image=cv2.imread(文件)
ret,thresh\u value=cv2.阈值(表\u图像\u轮廓,180,255,cv2.thresh\u二进制\u INV)
内核=np.one((5,5),np.uint8)
扩张的_值=cv2。扩张(阈值,核,迭代次数=1)
等高线,层次=cv2.findContours(扩展的_值,cv2.RETR_树,cv2.CHAIN_近似_简单)
对于轮廓中的cnt:
x、 y,w,h=cv2.boundingRect(cnt)
#边界
如果842
使用RETR.TREE时,所有白色区域都会找到轮廓。也就是说,它在等高线中获得等高线的层次结构。因此,通常需要确保要查找的对象是白色的。然后,如果它们不是外部(或外部)轮廓,则需要通过某种方法(通常是面积或周长或尺寸)对其进行过滤,或者可以按层次进行过滤。您是要获取文本还是列和行行?如果是文本,那么在提取轮廓之前,您可以尝试使用形态学删除长的水平线和垂直线。@fmw42我正在尝试获取整个列,因为所有单元格的大小都相同,这会更好。或者我可以删除表格边框和线条,然后将文本(前景)置为白色,将背景置为黑色,然后对文本进行拨号,使其合并在一起排序,然后应用束框,获取它们的位置,然后在原始图片上裁剪它们?这似乎是个更好的主意吗?单元格的
区域比每个字符都大-
区域=宽度*高度-
,您可以使用它来过滤它。还有
cv2.contourArea()
cv2.minareact()