博客
关于我
【OpenCV】基于Qt的“破产版”全能扫描王
阅读量:747 次
发布时间:2019-03-22

本文共 2015 字,大约阅读时间需要 6 分钟。

功能介绍

本项目主要包含证件扫描和文字纠正两个核心功能,软件界面简洁直观,用户可以通过菜单栏选择需要处理的图片文件。以下是主要功能的列表:

  • 图片打开和保存
  • 图片矫正(包括证件扫描和文字纠正)
  • 图片锐化增强
  • 图片清空
  • 阈值设置
  • 项目实现

    证件扫描基本思路

  • 抠图:提取图片轮廓
  • 矫正:透视变换
  • 锐化增强:二值化
  • 算法设计(证件扫描)

  • 提取边缘
    • 读取图像,转化为灰度图
    • 降噪,二值化(使用高斯滤波)
    • 适当膨胀,提高检测效率
    • 边缘检测(Canny算法)
  • 轮廓查找与筛选
    • 使用边缘检测结果找到轮廓
    • 应用霍夫直线检测,筛选出符合条件的直线
    • 排除距离过近或不相交的直线
  • 透视变换
    • 确定输出图像的长宽(可自适应)
    • 计算透视变换矩阵
    • 应用透视变换矩阵对图像进行变换
  • 锐化增强
    • 通过自适应二值化技术提升图像清晰度
  • UI设计

    文字纠正

    核心代码

    证件扫描

    Mat scanning() {    Mat src = imread(path);     Mat source = src.clone();    Mat bkup = src.clone();    Mat img = src.clone();    threshold(img, img, GRAY_THRESH, 255, CV_THRESH_BINARY);    GaussianBlur(img, img, Size(5, 5), 0, 0);    Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));    dilate(img, img, element);    Canny(img, img, 30, 120, 3);    vector
    contours; vector RaisePropertyChanged++}

    文字纠正

    Mat rotate(Mat srcImage) {    // 转换为灰度图      Mat grayImage;      cvtColor(srcImage, grayImage, CV_RGB2GRAY);      // 获取图片原尺寸      const int nRows = grayImage.row;      const int nCols = grayImage.col;      // 图像DFT变换      int mRows = getOptimalDFTSize(nRows);      int mCols = getOptimalDFTSize(nCols);      Mat newImage;      copyMakeBorder(grayImage, newImage, 0, mRows - nRows, 0, mCols - nCols, BORDER_CONSTANT, Scalar::all(0));      Mat groupImage[] = {Mat_c-gray, Mat_c-gray};      merge(groupImage, mergeImage);      dft(mergeImage, mergeImage);      split(mergeImage, groupImage);      magnitude(groupImage[0], groupImage[1], groupImage[0]);      magImage = Scalar::all(1);      log(magImage, magImage);      // 获得图像中心点      int cx = magImage.cols / 2;      int cy = magImage.rows / 2;      // 交换象限      Mat LT, RT, LB, RB;      // 绘制纠正后的图像      warpAffine(srcImage, resultImage, rotateMat, srcImage.size(), 1, 0, Scalar(255, 255, 255));      return resultImage;}

    项目截图

  • 证件扫描
  • 文字纠正
  • 效果对比
  • 效果对比(娱乐向)
  • 项目总结

  • 本项目实现了基本的证件扫描和文字纠正功能,类似“全能扫描王”我单独开发了一个版本,此页面中的扫描UI与原项目有所不同。
  • 项目的核心算法基于透视变换和傅里叶变换,现有的实现存在一定的局限性,关键参数(如直线阈值、轮廓标准等)对最终结果有一定影响,后续需要进一步优化。
  • 刚开始开发时对OCR概念理解不足,导致部分命名和设计存在疏漏,逐步学习后已明确其与本项目的区别。
  • 希望本文能为刚入门的图像处理爱好者提供参考,共同进步!
  • 转载地址:http://ziiwk.baihongyu.com/

    你可能感兴趣的文章
    mysql 为某个字段的值加前缀、去掉前缀
    查看>>
    mysql 主从
    查看>>
    mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
    查看>>
    mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
    查看>>
    mysql 主从关系切换
    查看>>
    MYSQL 主从同步文档的大坑
    查看>>
    mysql 主键重复则覆盖_数据库主键不能重复
    查看>>
    Mysql 事务知识点与优化建议
    查看>>
    Mysql 优化 or
    查看>>
    mysql 优化器 key_mysql – 选择*和查询优化器
    查看>>
    MySQL 优化:Explain 执行计划详解
    查看>>
    Mysql 会导致锁表的语法
    查看>>
    mysql 使用sql文件恢复数据库
    查看>>
    mysql 修改默认字符集为utf8
    查看>>
    Mysql 共享锁
    查看>>
    MySQL 内核深度优化
    查看>>
    mysql 内连接、自然连接、外连接的区别
    查看>>
    mysql 写入慢优化
    查看>>
    mysql 分组统计SQL语句
    查看>>
    Mysql 分页
    查看>>