我有一张打印文本的灰度图像.我想从图像中提取每个字符,这样我就可以将它们保存为离散图像.我不想要recognise个字符是什么,我只想每个字形作为一个单独的文件.

我用的是cv2,例如:

# Find contours to isolate individual letters
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)`

这对于连续的字符非常有效--也就是说,字形的形状没有断点.

但它对ij:;这样的字符不起作用-顶部的圆点不包括在内.

有没有办法使用CV2来检测这些字符?我知道这份文件只使用了拉丁字母、数字和标点符号.

这份文档使用了相当古老的字体,在Tesseract或其他传统的OCR引擎上不能很好地工作--这就是为什么我想要detect个字母,而不是试图recognise个.

推荐答案

我用OpenCV's Erode / Dilate function在垂直方向上侵蚀图像.

kernel = np.array([[0, 0, 0, 0, 0],
                   [0, 0, 1, 0, 0],
                   [0, 0, 1, 0, 0],
                   [0, 0, 1, 0, 0],
                   [0, 0, 0, 0, 0]], dtype=np.uint8)

erode = cv2.erode(image, kernel, iterations = 6)

这改变了这一点:

Old printed text

进入这一阶段:

Text which has been vertically deformed

这连接了i?字符上的圆点,同时留出了足够的水平空间来进行检测.

我对侵蚀的图像进行了检测,但对原始图像进行了裁剪.

Python相关问答推荐

将轨迹优化问题描述为NLP.如何用Gekko解决这个问题?当前面临异常:@错误:最大方程长度错误

计算相同形状的两个张量的SSE损失

如何使用Jinja语法在HTML中重定向期间传递变量?

如何自动抓取以下CSV

删除所有列值,但判断是否存在任何二元组

为什么符号没有按顺序添加?

从dict的列中分钟

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何创建一个缓冲区周围的一行与manim?

如何根据一列的值有条件地 Select 前N组?

* 动态地 * 修饰Python中的递归函数

如何获取Python synsets列表的第一个内容?

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

将CSS链接到HTML文件的问题

如何获得3D点的平移和旋转,给定的点已经旋转?

用fft计算指数复和代替求和来模拟衍射?

没有内置pip模块的Python3.11--S在做什么?

极点替换值大于组内另一个极点数据帧的最大值

如何根据一定条件生成段id

操作布尔值的Series时出现索引问题