前言

1.做文字识别相关的项目,首先是检测字符区域,然后进行水平切割,得到整行的文字,其次要考虑的就是怎么将每一个字符分开,并且从图片中切割下来,然后才可以导入训练好的模型进行字符识别。在字符单个切割的切割的过程中,可以使用OpenCV来实现。
2.我这里用到的OpenCV的版本是3.30,IDE是Qt和VS2015。

代码演示

void textCutting(Mat &src, vector<Mat> &out_char)
{   if (src.channels() > 1){cvtColor(src, src, CV_BGR2GRAY);}//滤波//GaussianBlur(src, src, Size(1, 1), 5, 5, 4);adaptiveThreshold(src, src, 255, cv::ADAPTIVE_THRESH_MEAN_C, cv::THRESH_BINARY, 41, 0);//新建一个全白图像Mat white_base(src.size(), src.type(), cv::Scalar(255));//相减得到反转的图像Mat input_src = white_base - src;const int src_width = input_src.cols;const int src_height = input_src.rows;//储存每列白色像素个数的容器//取列白色像素个数vector<int> white_pice(src_width,0);for (size_t i = 0; i < src_height; i++){for (size_t j = 0; j < src_width; j++){if (input_src.at<uchar>(i, j)){white_pice.at(j)++;}}}//绘制垂直投影下每列白色像素的数目Mat vertical_projection(src_height, src_width, CV_8UC1, Scalar(0));for (int i = 0; i< src_width; i++){for (int j = 0; j < white_pice[i]; j++){vertical_projection.at<uchar>(src_height - j - 1, i) = 255;}}imshow("投影图", vertical_projection);vector<Mat> split_src;bool white_block = false;bool black_block = false;int temp_col_forword = 0, temp_col_behind = 0;Mat split_temp;for (int i = 0; i < src_width; i++){//表示区域有白色像素if (white_pice[i]){white_block = true;black_block = false;}else{ //若无白色像素(进入黑色区域)if (white_block){//若前一列有白色像素temp_col_behind = i;//取当前列为截止列//截取下一部分split_temp = input_src(Rect(temp_col_forword, 0, temp_col_behind - temp_col_forword, src_height)).clone();split_src.push_back(split_temp);}//记录最新黑色区域的列号,记为起始列temp_col_forword = i;//表示进入黑色区域black_block = true;white_block = false;}}for (int i = 0; i < split_src.size(); i++){imshow(to_string(i), split_src[i]);//out_char.push_back(split_src[i]);}
}

函数调用:

Mat src;
src = imread("4.png");
vector<Mat> dst;
imshow("src", src);
textCutting(src, dst);

运行结果:

使用OpenCV实现图像中的文字切割相关推荐

  1. OpenCV在图像中添加文字,画点,画直线

    OpenCV在图像中添加文字,画点,画直线 [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/77870983 #inclu ...

  2. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  3. 使用Python,OpenCV查找图像中的最亮点

    Python,OpenCV找出图像中的最亮点 1. 原理 2. 优化 3. 效果图 4. 源码 参考 这篇博客将向您展示如何使用Python和OpenCV查找图像中的最亮点,以及应用单行预处理代码-- ...

  4. 使用Python,OpenCV从图像中删除轮廓

    使用Python,OpenCV从图像中删除轮廓 1. 效果图 2. 步骤 3. 源码 4. 参考 1. 使用Python.OpenCV计算轮廓的中心并标记 2. 使用Python.OpenCV检测轮廓 ...

  5. 使用Python,OpenCV寻找图像中的轮廓

    使用Python和OpenCV查找图像中的形状 1. 效果图 2. 步骤 3. 源码 参考 这篇博客将讨论使用Python和OpenCV查找图像中的形状,具体是 cv2.inRange在图像中查找形状 ...

  6. OpenCV在图像中寻找轮廓的实例(附完整代码)

    OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 OpenCV在图像中寻找轮廓的实例 #include "opencv2/imgcodecs.hpp" #in ...

  7. OpenCV在图像中寻找轮廓

    OpenCV在图像中寻找轮廓 在图像中寻找轮廓 目标 代码 结果 在图像中寻找轮廓 目标 在本教程中,您将学习如何: 使用OpenCV函数cv :: findContours 使用OpenCV函数cv ...

  8. python 图像处理与识别书籍_Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install p ...

  9. python去除图片上的文字_Python图像处理之识别图像中的文字(实例讲解)

    ①安装PIL:pip install Pillow(之前的博客中有写过) ②安装pytesser3:pip install pytesser3 ③安装pytesseract:pip install p ...

最新文章

  1. 最全的Centos6.10详细安装Oracle 11G R2图文教程
  2. 服务器证书安装配置指南(Nginx)-天威诚信
  3. 百度网络推广介绍网站在更换老域名时都需注意哪些?
  4. java mysql数据去重_java使用MySQL和HQL数据去重
  5. 文件内容查看---Linux
  6. python离线安装pip.whl_20180903 - Python Pip 工具下载whl包与离线安装
  7. 基于java+swing+mysql+JFeeChart的企业人力资源管理系统(1)
  8. 【HDFS】HDFS操作命令
  9. 【数据结构笔记17】集合的表示、双亲表示法、并查集、集合的并运算
  10. 01-信贷路由项目架构和 rose 框架的搭建
  11. 25行代码实现定时自动发送微信消息!
  12. java生成卡号_java 生成银行卡号
  13. Qt实用技巧:自定义窗口标题栏
  14. crystal xcelsius 的使用
  15. C++ 高效位运算函数 之 __builtin_
  16. 基于JavaGUI的中英文打字训练测试软件设计
  17. AndroidManifest基本定义
  18. deck.gl 调研
  19. 5个值得关注的L1公链
  20. 引流产品分几类?引流产品结构四类定位产品

热门文章

  1. 用leda没有java enterprise选项_Visual Studio 支持 Java?谣言止于智者
  2. git上传代码到码云(详细)
  3. C++ exception
  4. Netty原理和使用
  5. Java Web系列:Spring MVC基础
  6. Spring分布式事务实现
  7. Java程序员从笨鸟到菜鸟之(八十六)跟我学jquery(二)大话jquery选择器
  8. 高等数学:第三章 微分中值定理与导数的应用(2)函数单调性 极值 最大值 最小值
  9. 牛顿法 Newton Method
  10. 分享一些优秀有趣的博客