基于轮廓提取图像文字

内容:

使用你上一篇博客图像透视变换的结果,将A4纸上的线条单独识别出来。 
输入图像: 
 
输出图像: 

Python使用opencv实现

实验环境:Window下使用Python的Opencv库

  1. 通过阈值进行前后景分割(将线条和A4纸分开) 
    先将输入图片转为灰度图,然后使用阈值分割函数实现二值化:
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret,thresh = cv2.threshold(gray,190,255,cv2.THRESH_BINARY)
cv2.imwrite("thresh.jpg", thresh)
  • 1
  • 2
  • 3
  • 4
  • 5

cv2.threshold第二个参数灰度值表示小于该值就将其变为0

  1. 形态学图像处理(膨胀腐蚀)

膨胀就是求局部最大值的操作,腐蚀就是求局部最小值,所以相当于做最大值最小值滤波。我们为了让轮廓更明显,所以需要做腐蚀处理。

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
eroded = cv2.erode(thresh, kernel)
cv2.imwrite("eroded.jpg", eroded)
  • 1
  • 2
  • 3

用getStructuringElement函数定义一个10×10的十字结构元素,用作选取的周围点。 
腐蚀后:

 
3. 轮廓检测

contours, hierarchy = cv2.findContours(eroded,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
  • 1

findContours函数 
参数

第一个参数是寻找轮廓的图像; 
第二个参数表示轮廓的检索模式,有四种(本文介绍的都是新的cv2接口): 
cv2.RETR_EXTERNAL表示只检测外轮廓 
cv2.RETR_LIST检测的轮廓不建立等级关系 
cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。 
cv2.RETR_TREE建立一个等级树结构的轮廓。 
第三个参数method为轮廓的近似办法 
cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1 
cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

  • 返回值 
    cv2.findContours()函数首先返回一个list值,list中每个元素都是图像中的一个轮廓也就我们要用到的contours。

选取边界矩形:

for c in contours:x, y, w, h = cv2.boundingRect(c)cv2.rectangle(img, (x, y), (x + w, y + h), color, 1)
  • 1
  • 2
  • 3

 
4. 通过ROI将每张图片输出 
通过矩形轮廓输出提取的笔划图像,这里直接用imwrite输出。 

完整代码:

# -*- coding: utf-8 -*-
import cv2img = cv2.imread('input.jpg')
result = img.copy()gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)ret,thresh = cv2.threshold(gray,190,255,cv2.THRESH_BINARY)
cv2.imwrite("thresh.jpg", thresh)kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (10, 10))
eroded = cv2.erode(thresh, kernel)
cv2.imwrite("eroded.jpg", eroded)binary, contours, hierarchy = cv2.findContours(eroded,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)color = (0, 255, 0)
for c in contours:x, y, w, h = cv2.boundingRect(c)cv2.rectangle(img, (x, y), (x + w, y + h), color, 1)temp = result[y:(y + h), x:(x + w)]cv2.imwrite("./result/" + str(x) + ".jpg", temp)cv2.imwrite("result.jpg", img)

opencv 轮廓提取文字相关推荐

  1. python opencv轮廓提取_Python + Opencv2 实现轮廓提取,轮廓区域面积计算

    对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结束,还需对轮廓所勾勒的像素面积区域统计计算. 本篇文章的主要内容就是 ...

  2. OpenCV轮廓提取和椭圆拟合

    今天用到了几个函数,作个总结. 首先是在二值图像中找轮廓,我的图象中只有一条轮廓,所以使用比较简单. 首先要分配存储空间,使用函数cvCreateMemStorage(0)分配一个默认大小的CvMem ...

  3. python使用opencv实现文档扫描并提取文字

    目的 将输入文档使用透视变换将不规则图形变换,然后使用tesseract库进行识别文字 变换前图形 变换后图形 步骤 1.加载原图并显示 2.重新调整大小 3.灰度处理 4.滤波 5.边缘检测 6.找 ...

  4. 图像轮廓提取算法(Opencv基于C++实现)

    Opencv图像轮廓提取 0. 实现结果如下: 1. 打开图像代码 2. 轮廓提取函数 3. 代码实现 本文主要实现了图像的轮廓提取,首先先给出直观的轮廓实现结果: 0. 实现结果如下: 1. 打开图 ...

  5. pythonopencv提取轮廓区域_Python + Opencv 实现轮廓提取,轮廓区域面积计算

    Python + Opencv2 实现轮廓提取,轮廓区域面积计算: 对图像处理时,会遇到这样一个场景:找到图像主体轮廓,这是其一,可能为了凸显轮廓,需要用指定的颜色进行标记:轮廓标记完可能任务还没有结 ...

  6. OpenCV实践之路——opencv玩数独之一九宫格轮廓提取与透视变换

    本文由@星沉阁冰不语出品,转载请注明作者和出处. 文章链接:http://blog.csdn.net/xingchenbingbuyu/article/details/50783585 微博:http ...

  7. 《OpenCv视觉之眼》Python图像处理十二 :Opencv图像轮廓提取之基于一阶导数的Roberts算法、Prewitt算法及Sobel算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  8. OpenCV学习笔记(六)之轮廓提取与角度测量

      查找图像的轮廓在图像处理及应用中扮演着重要的角色.openCV 中的轮廓指的是由一系列点组成的点的集合,不同的轮廓可以有不同的点集.openCV中,轮廓是由STL风格的vector<> ...

  9. 《OpenCv视觉之眼》Python图像处理十四 :Opencv图像轮廓提取之Scharr算法和Canny算法

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

最新文章

  1. weblogic反序列化漏洞
  2. json文件示例_Spark SQL - JSON数据集
  3. VMware 扩展磁盘容量
  4. TP查询数据库多维数组
  5. iview图表_【技术博客】iview常用工具记录
  6. c#金额转换成中文大写金额
  7. 使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍
  8. 如何化身BAT面试收割机?不吃透都对不起自己
  9. unix和linux命令_在Linux / UNIX中查找命令
  10. Java 多线程编程基础(详细)
  11. 小超市的大梦想,京东的梦醒时分
  12. 【8】黑塞矩阵提取图片关键点
  13. z77主板可以用nv_刚和吧友讨论了z77加装nvme固态的问题。在这重开一帖。
  14. vbs格式编程教程基础
  15. u盘写保护无法格式化的修复
  16. 2019智能网联汽车技术大会 | 感知+计算——解决智能网联汽车感知困境的必然趋势...
  17. python中seek函数_Python seek()函数
  18. 黑客帝国中英文对照经典对白
  19. 企业高频实用API推荐
  20. R6034错误的解决(转)

热门文章

  1. 使用wangeditor遇到的坑,插入视频只显示音频
  2. 实验吧-天下武功唯快不破
  3. 压网线教程图解(做水晶头)
  4. net start mongodb 发生系统错误 1058。
  5. Android客户端与PC服务器通过socket进行交互实例
  6. PC与服务器的区别有哪些?
  7. 柠檬班培训1软件测试
  8. vector用erase删除元素时,为什么被删元素的析构函数会被调用更多次?
  9. abp 使用mysql_ABP Vnext使用mysql数据库
  10. 大数据技术怎么自学?大数据开发如何自学?