首页 > 编程语言 >OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

时间:2024-06-09 18:29:39浏览次数:15  
标签:src showAndWaitKey AI cv2 OpenCV 角度 源码 np

本文来源公众号“OpenCV与AI深度学习,仅用于学术分享,侵权删,干货满满。

原文链接:实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)

1 导  读

    本文主要介绍使用OpenCV对扫描文本矫正的应用实例及详细实现步骤。      

2 背景介绍

    在使用打印机或扫描仪扫描文档时,由于摆放位置差异难免造成扫描文档的倾斜。本文将使用OpenCV将倾斜的文档矫正水平并去除黑边。      

3 实现步骤

    本文只针对包含大部分文字的文档做倾斜矫正,思路来源是大部分文字倾斜后同一行的也在同一条直线,通过拟合直线计算文本倾斜角度,然后旋转来实现文本倾斜矫正。

  【1】加载倾斜图像

  【2】灰度转换+腐蚀+膨胀

  【3】Canny边缘检测 + 霍夫线变换检测直线

  【4】计算直线角度中值作为最终的旋转角度,旋转图像

    注意不建议用最值或平均值,因为霍夫线变换有可能拟合到异常角度直线,最值或均值会导致最终角度偏大或偏小,使矫正结果偏差较大。

为什么使用均值?大家可以结合中值滤波的概念来理解。

举例来说:霍夫线变换找到了10条直线,角度分别为:0°,5°,25°,26°,26°,28°,28°,30°,100°,150°。如果去最大值angle=150°,最小值angle=0°,平均值angle=41.8°,中值angle=27°,明显中值结果更准确,更符合直线拟合角度的统计特性,因为拟合直线结果中大部分直线拟合是准确的,这部分角度会集中在一起。当然,使用直方图统计,计算出现频率最多的角度范围更准确,大家可以自行尝试。

  【5】去除边角黑边(使用漫水填充或轮廓删选方式)

  【6】换图片测试

4 代码解析

import numpy as np
import os
import cv2
import math
from scipy import misc,ndimage

def rotate(image,angle,center=None,scale=1.0):
    (w,h) = image.shape[0:2]
    if center is None:
        center = (w//2,h//2)   
    wrapMat = cv2.getRotationMatrix2D(center,angle,scale)    
    return cv2.warpAffine(image,wrapMat,(h,w))

#使用霍夫变换
def getCorrect2():
    #读取图片,灰度化
    src = cv2.imread('./imgs/1.jpg')
    showAndWaitKey("src",src)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    showAndWaitKey("gray",gray)
    #腐蚀、膨胀
    kernel = np.ones((5,5),np.uint8)
    erode_Img = cv2.erode(gray,kernel)
    eroDil = cv2.dilate(erode_Img,kernel)
    showAndWaitKey("eroDil",eroDil)
    #边缘检测
    canny = cv2.Canny(eroDil,50,150)
    showAndWaitKey("canny",canny)
    #霍夫变换得到线条
    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90,minLineLength=100,maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)
    #画出线条
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
    
    showAndWaitKey("houghP",drawing)
    """
    计算角度,因为x轴向右,y轴向下,所有计算的斜率是常规下斜率的相反数,我们就用这个斜率(旋转角度)进行旋转
    """
    k = float(y1-y2)/(x1-x2)
    thera = np.degrees(math.atan(k))
    print(thera)

    """
    旋转角度大于0,则逆时针旋转,否则顺时针旋转
    """
    rotateImg = rotate(src,thera)
    cv2.imshow("rotateImg",rotateImg)
    cv2.waitKey()
    cv2.destroyAllWindows()
    cv2.imwrite('result.jpg',rotateImg)

def showAndWaitKey(winName,img):
    cv2.imshow(winName,img)
    cv2.waitKey()

if __name__ == "__main__":              
    getCorrect2()

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

标签:src,showAndWaitKey,AI,cv2,OpenCV,角度,源码,np
From: https://blog.csdn.net/csdn_xmj/article/details/138501897

相关文章

  • AI搜索哪家强?16款产品实战测评,效率飙升秘籍!
    文章推荐AI日报|国产大模型迎来新卷王,天工MoE全球首用4090推理,马斯克计划豪掷90亿购买GPUAI日报|斯坦福团队被曝抄袭国内大模型已删库跑路!英伟达打破摩尔定律,机器人时代到来AI搜索,不只是技术,它是一种理解世界的新方式。最近Perplexity被传出正进行新一轮2.5亿美元融资,短短6个......
  • 加油站AI智能视频监控分析系统 YOLOv8
    加油站AI智能视频监控分析系统可以根据视频总流量分析技术,使优化算法实体模型替代人的眼睛,加油站AI智能视频监控分析系统即时鉴别加油站内部的工作过程中的安全规范、员工行为准则等问题。加油站AI智能视频监控分析系统优化算法实体模型可以精确捕获违规操作,全年度24个小时无间......
  • 基于微信小程序的网上鲜花店管理系统的设计与实现(期末大作业)+附源码+数据库
     摘要:本文旨在介绍设计与实现一款鲜花店小程序的过程。首先,分析目标用户群体的需求,确定了主要功能模块包括商品展示、购物车、订单管理等。接着,设计简洁直观的用户界面,采用了吸引人的图片效果,提升了用户体验。在功能模块方面,我们实现了用户注册、登录、商品浏览、下单购买等核......
  • 【知识点】C++ STL 中的 iterator_traits 类
    iterator_traits讲解基本定义iterator_traits是一个模板类,用于提供与迭代器相关的类型信息。以下是iterator_traits的基本定义:#include<iterator>template<typenameIterator>structiterator_traits{typedeftypenameIterator::difference_typediffere......
  • AI学习的基础理论路径
    目录一、基础阶段二、进阶阶段三、高级阶段四、涉及到的算法现在AI已经火了一段时间了,对于想入局AI的大伙,除了可以使用具体的AI产品外,还应可使用具体的模型训练自己的数据,最终形成自己的模型,最后,高阶的可开发自己的模型(需要大量物力财力做支撑),因此,无论在哪个层面,系统地......
  • Dubbo 3.x源码(21)—Dubbo服务引用源码(4)
    基于Dubbo3.1,详细介绍了Dubbo服务的发布与引用的源码。此前我们学习了createInvokerForRemote方法中的Wrapper有哪些以及作用,接下来我们将会的学习真正的本地、应用级别、接口级别的Protocol的引入逻辑,以及创建Proxy服务接口代理对象的逻辑。Dubbo3.x服务引用源码:Dub......
  • 基于OpenCV的SIFT算法实现图像拼接(全景图像)
    一、SIFT算法尺度不变特征转换(Scale-invariantfeaturetransform或SIFT)是一种机器视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变数,此算法由DavidLowe在1999年所发表,2004年完善总结。SIFT算法的实质是在不同的尺度......
  • 初入职场的程序员如何选择AI大模型产品:全面分析
    作为初入职场的程序员,面对层出不穷的AI大模型产品,选择适合自己的工具至关重要。这不仅关系到工作效率的提升,也影响到职业发展的方向。本文将从几个关键方面,详细分析初入职场的程序员该如何选择AI大模型产品,帮助你做出明智的决策。1.了解自己的需求1.1工作内容需求首先,......
  • 基于协同过滤的在线通用旅游平台网站java ssm mysql|全套源码+文章lw+毕业设计+课程设
    基于协同过滤的在线通用旅游平台网站javassmmysql|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要近几年来,计算机网络的发展得到了飞速的提升,由此展开的一系列行业大洗牌也由此开始。早些年只是人们只是对于计算机和互联网有了些基础的认识,现在它正在悄悄的改变着我......
  • 高校毕业设计管理系统java ssm mysql|全套源码+文章lw+毕业设计+课程设计+数据库+ppt
    高校毕业设计管理系统javassmmysql|全套源码+文章lw+毕业设计+课程设计+数据库+ppt摘要现代学校的教学规模逐渐增加,需要处理的信息量也在增加。每年毕业,将会有大量的毕业设计要处理。传统的毕业设计管理方法已不能满足师生的需求。教师和学生需要一个简单方便的系统来......