python - 如何使用 opencv 集中和调整数字大小?

标签 python opencv numpy ocr mnist

我想对一些扫描的表格(手工填写)进行 OCR。这是我第一次使用计算机视觉做一些严肃的事情。到目前为止,我能够找到包含日期字段数字的方 block :

enter image description here

查看 OpenCV 附带的示例手写数字数据集,我看到数字被集中并调整为 (20, 20):

enter image description here

因为这可能是一个相当普遍的问题,我想知道该算法是否已经在OpenCV(或numpyscipy)中实现等),所以我不必重新发明轮子。

问题是:Python 中是否有一个内置的管道来规范化样本?

最佳答案

内置管道不确定,但如果您已经有了轮廓,您可以通过执行以下操作(基于我的评论)来实现自己的管道:

获取轮廓的边界矩形(因此以它为中心)并裁剪该部分:

x,y,w,h = cv2.boundingRect(cnt)
imgCrop = img[x:(x+w), y:(y+h)]

将图像调整为所需大小(比如 20 x 20):

imgResized = cv2.resize(imgCrop, (20,20))   

您还可以按特定比例调整轴的大小,例如:

imgResized = cv2.resize(imgCrop, (0,0), fx=0.5, fy=0.5)  

或使用 scipy(如 this 问题中所建议):

imgResized = scipy.misc.imresize(imgCrop, 0.5)  

奖励:检查this关于使用 Python 和 OpenCV 进行基本图像处理的很棒的教程,他们展示了其他调整大小的方法,同时考虑到纵横比和插值以获得更好的结果,并从中提取:

imgResized = cv2.resize(imgCrop, (20,20), interpolation = cv2.INTER_AREA)

关于python - 如何使用 opencv 集中和调整数字大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914035/

相关文章:

python - 如何通过函数注解表明一个函数需要一个函数作为参数,或者返回一个函数?

python - HMAC-SHA256 与 CBC 模式下的 AES-256

opencv - OpenCV 的增量奇异值分解

c++ - 从 32 位迁移到 64 位 - OpenCV/MinGW/Eclipse

python - 如何删除 numpy 数组中的非对称对?

python - try-except block 中的 Numpy 零除,引发 "RuntimeWarning: invalid value encountered in double_scalars"和奇怪的结果

python - Python ValueError : Bin edges must be unique

python - 比较来自 2 个以上列表的对象

c++ - 释放返回值/指向 CvMat 的指针的内存

python - 根据单元格区域重新排列 numpy 数组