深度学习实战12(进阶版)-利用Dewarp实现文本扭曲矫正
大家好,我是微学A1, 我们在生活中会看到一些拍摄扭曲的图片,我们在通过OCR识别的时候,因为扭曲的厉害,而无法识别,我们需要对图片进行处理。
文件图像的变形有扭曲、折叠、褶皱、透视等多种情况,解决方案可以分为参数化方法和非参数化方法。参数化方法构建只能处理简单场景的低维度的数学模型。在非参数方法中,通常需要创建一对数据集。
假设文档变形用低维参数化模型表示,不能处理失真情况,不能处理折叠变形。参数模型主要考虑参数。
1、旋转矢量r和平移矢量t的三维空间中的页面
2、指定页面表面的两个曲率alpha和beta,并将行文本视为一条曲线。这里假设扭曲后成为三次样条线,由两个系数a和b控制。
3、页面上n个水平跨度的垂直偏移。垂直偏移是分割的每行之间的距离。
4.对于每个跨度,水平跨度上m个点的水平偏移。水平偏移是每条直线上设置的点之间的距离。
我们可以利用python,安装第三方库:
pip install page-dewarp
外部调用from page_dewarp import __main__,
#__main__.main(img) # 图片文字扭曲处理
扭曲处理的main函数代码如下:
from cv2 import namedWindow
import cv2
from .cli import ArgParser
from .debug_utils import cCOLOURS, debug_show
from .image import WarpedImage
from .options import cfg
from .pdf import save_pdf
# for some reason pylint complains about cv2 members being undefined :(
# pylint: disable=E1101
def main(imgfile):
outfiles = []
# print(imgfile)
src = cv2.imread(imgfile)
# print(src.shape[0],src.shape[1])
src = src[0:src.shape[0] - 40, 0:src.shape[1]]
cv_img = cv2.copyMakeBorder(src, 120, 0, 120, 120, cv2.BORDER_REPLICATE)
cv2.imwrite(imgfile, cv_img)
processed_img = WarpedImage(imgfile)
# if processed_img.written:
# outfiles.append(processed_img.outfile)
# print(f" wrote {processed_img.outfile}", end="\n\n")
if cfg.pdf_opts.CONVERT_TO_PDF:
save_pdf(outfiles)
if __name__ == "__main__":
main()
通过调用,输入图片地址,可生成处理好的图片,保存你们想要的地址。
图片处理效果如下:
后续更新更多功能,请持续关注,如有问题与合作可私信答疑。