博客
关于我
【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/

    你可能感兴趣的文章
    python+requests+unittest执行自动化接口测试!
    查看>>
    Python+Requests编码识别Bug
    查看>>
    python函数编写_[零基础学python]传说中的函数编写条规
    查看>>
    Python+selenium —— UI自动化之鼠标操作
    查看>>
    python函数注释,参数后面加冒号:,函数后面的箭头→是什么?
    查看>>
    Python+Selenium+Threading进行兼容性测试
    查看>>
    Python+selenium+unittest的GUI自动化框架实现
    查看>>
    python函数拟合不规则曲线_Python计算&绘图——曲线拟合问题(转)
    查看>>
    python函数定义的基本格式_零基础学python-2.19 定义函数、调用函数与默认参数
    查看>>
    Python+Selenium之数据驱动测试的实现
    查看>>
    python函数定义与使用+返回值简解
    查看>>
    Python+Selenium登录
    查看>>
    Python日期时间模块
    查看>>
    Python函数合集:足足68个内置函数请收好!
    查看>>
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(上)
    查看>>