# coding:utf8
import numpy as np
import cv2
from PIL import Image
import pytesseract
import sys
# 读取文件
imagePath = "D:/1.png"
img = cv2.imread(imagePath)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('img',gray)
cv2.waitKey()
# 此步骤形态学变换的预处理,得到可以查找矩形的图片
# 参数:输入矩阵、输出矩阵数据类型、设置1、0时差分方向为水平方向的核卷积,设置0、1为垂直方向,ksize:核的尺寸
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, ksize = 3)
cv2.imshow('sobel',sobel)
cv2.waitKey()
# 二值化
ret, binary = cv2.threshold(sobel, 0, 255, cv2.THRESH_OTSU+cv2.THRESH_BINARY)
# 设置膨胀和腐蚀操作的核函数
element1 = cv2.getStructuringElement(cv2.MORPH_RECT, (30, 9))
element2 = cv2.getStructuringElement(cv2.MORPH_RECT, (24, 6))# 膨胀一次,让轮廓突出
dilation = cv2.dilate(binary, element2, iterations = 1)
cv2.imshow('dilation', dilation)
cv2.waitKey()
# 腐蚀一次,去掉细节,如表格线等。注意这里去掉的是竖直的线
erosion = cv2.erode(dilation, element1, iterations = 1)
cv2.imshow('erosion', erosion)
cv2.waitKey()
# aim = cv2.morphologyEx(binary, cv2.MORPH_CLOSE,element1, 1 )   #此函数可实现闭运算和开运算
# 以上膨胀+腐蚀称为闭运算,具有填充白色区域细小黑色空洞、连接近邻物体的作用# 再次膨胀,让轮廓明显一些
dilation2 = cv2.dilate(erosion, element2, iterations = 3)
# 显示膨胀一次后的图像处理效果
# plt.imshow(dilation2,'gray')
#
# # 显示一次闭运算后的效果
# plt.imshow(erosion,'gray')
#
# # 显示连续膨胀3次后的效果
# plt.imshow(dilation2,'gray')#  查找和筛选文字区域
region = []
#  查找轮廓
contours, hierarchy = cv2.findContours(dilation2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 利用以上函数可以得到多个轮廓区域,存在一个列表中。
#  筛选那些面积小的
for i in range(len(contours)):# 遍历所有轮廓# cnt是一个点集cnt = contours[i]# 计算该轮廓的面积area = cv2.contourArea(cnt)# 面积小的都筛选掉、这个1000可以按照效果自行设置if(area < 1000):continue#     # 将轮廓形状近似到另外一种由更少点组成的轮廓形状,新轮廓的点的数目由我们设定的准确度来决定
#     # 轮廓近似,作用很小
#     # 计算轮廓长度
#     epsilon = 0.001 * cv2.arcLength(cnt, True)#     #
# #     approx = cv2.approxPolyDP(cnt, epsilon, True)# 找到最小的矩形,该矩形可能有方向rect = cv2.minAreaRect(cnt)# 打印出各个矩形四个点的位置# print ("rect is: ")# print (rect)# box是四个点的坐标box = cv2.boxPoints(rect)box = np.int0(box)# 计算高和宽height = abs(box[0][1] - box[2][1])width = abs(box[0][0] - box[2][0])# 筛选那些太细的矩形,留下扁的if(height > width * 1.3):continueregion.append(box)# 用绿线画出这些找到的轮廓for box in region:cv2.drawContours(img, [box], 0, (0, 255, 0), 2)print(box)# plt.imshow(img, 'brg')# plt.show()Xs = [i[0] for i in box]Ys = [i[1] for i in box]x1 = min(Xs)x2 = max(Xs)y1 = min(Ys)y2 = max(Ys)hight = y2 - y1width = x2 - x1crop_img: object = img[y1:y1 + hight, x1:x1 + width]print('result/%d'%i+'.jpg')# im=cv2.imshow('crop_img', crop_img)cv2.imwrite('result/%d'%i+'.jpg',crop_img,[int(cv2.IMWRITE_JPEG_QUALITY),70])
# 弹窗显示
cv2.namedWindow("img", cv2.WINDOW_NORMAL)
cv2.imshow("img", img)# 带轮廓的图片#Image = Image.open('1.png')   # 打开图片
# self.progressBar.setProperty("value", 0)
text = pytesseract.image_to_string(crop_img, lang='chi_sim')  #使用简体中文解析图片
print(text)cv2.waitKey(0)
cv2.destroyAllWindows()

opencv+python 图片文字识别相关推荐

  1. Python图片文字识别——Windows下Tesseract-OCR的安装与使用

    Python图片文字识别--Windows下Tesseract-OCR的安装与使用 前言 Windows下Tesseract-OCR的安装与配置 Tesseract-OCR简介与版本选择 tesser ...

  2. python识别文字软件_|python图片文字识别扫描工具下载免费版 - 欧普软件下载

    python图片文字识别扫描工具是一款文字识别软件,软件基于Python和百度识别接口设计而来,可快速识别图片中的文字,写入TXT文件,支持快捷键F1截屏,虽说是基于命令行的操作,但是操作也算简单,需 ...

  3. 【python 图片文字识别】pyocr图片文字识别

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.人工智能教程 pyocr 官方网 ...

  4. python 图片文字识别orc

    先下载tesseract.exe,安装,并配置其两个环境变量, 安装包下载地址: http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-set ...

  5. python长什么样子图片_怎么样提升python图片文字识别精度,有什么库或是方法吗?...

    使用tesseract zfb.jpg -l chi_sim out tesseract -v tesseract 3.02 leptonica-1.68 (Mar 14 2011, 10:43:03 ...

  6. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  7. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  8. 2021-02-21 Python Easyocr 图片文字识别

    Python Easyocr 图片文字识别 前段时间做了车牌识别相关的内容分享,参看: 车牌识别(1)-车牌数据集生成 车牌识别(2)-搭建车牌识别模型 今天给大家分享一个简单的OCR文本识别工具:e ...

  9. python切割图片文字_Python+opencv 实现图片文字的分割的方法示例

    Python+opencv 实现图片文字的分割的方法示例 发布时间:2020-08-26 03:28:37 来源:脚本之家 阅读:116 作者:坏小孩90 实现步骤: 1.通过水平投影对图形进行水平分 ...

最新文章

  1. 占据栅格地图(Occupancy Grid Map)
  2. 焦李成院士:进化优化与深度学习的思考
  3. 1078 Hashing (25 分)【难度: 一般 / 知识点: 哈希表二次探测法】
  4. 全国python一级考试_全国青少年软件编程(Python)等级考试试卷(一级) 1-1
  5. Java讲课笔记28:Path接口和Files工具类
  6. 在Ubuntu下实现一个简单的C语言程序
  7. 编程实现strcpy函数_C编程中的strcpy()
  8. BERT meet Knowledge Graph:预训练模型与知识图谱相结合的研究进展
  9. 时间序列 ARMA 模型实战!
  10. ssm教务排课系统MVC学校专业选修课程安排选课信息jsp源代码数据库mysql
  11. postman中的header入参
  12. tp6 导入excel表格
  13. 虚拟服务器钟楼古城微博,最无聊中外钟楼微博走红
  14. labview制成app_我为什么选择使用Labview来做软件?
  15. 【解决方法】屏幕滚动时文字短暂变蓝
  16. openfire整合
  17. 利用python快速转换GenBank和RefSeq的染色体号
  18. 奥塔在线:Linux下按日期自动创建目录脚本
  19. 网站前台-登陆与用户中心
  20. 使用Zerotier+Moon结点内网穿透

热门文章

  1. Top 5 个功能强大免费开源的数据可视化平台
  2. Ardupilot 串口代码学习
  3. Kinect for Windows SDK v2.0 开发笔记 (五)骨骼帧与笑面男
  4. where和which的区别【定于从句】
  5. 想成为一个优秀的程序员,首先做到这5点
  6. CultureInfo 類別
  7. echarts gallery,echarts社区地址(可视化作品分享的地址)
  8. 985 高校副教授一年工资多少?
  9. sigmoid函数原理及饱和后梯度消失的问题
  10. 【js实现手写签名板】canvas