OpenCV(九)--文字扫描OCR识别

这篇具有很好参考价值的文章主要介绍了OpenCV(九)--文字扫描OCR识别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

步骤:边缘检测+计算轮廓+变换+OCR

def show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread('tip.png')
show('img', img)

opencv ocr,OpenCV,opencv,计算机视觉,人工智能

img = cv2.resize(img, (500, int((500 * img.shape[0])/img.shape[1])))
# 预处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# 边缘检测
edged = cv2.Canny(gray, 75, 200)
show('edged', edged)

opencv ocr,OpenCV,opencv,计算机视觉,人工智能

# 轮廓处理
cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:5]  # reverse=True表示倒序(从大到小)

for c in cnts:
    # 计算轮廓近似
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02*peri, True)
    # 如果近似为一个矩形
    if len(approx) == 4:
        screenCnt = approx
        break

cv2.drawContours(img, [screenCnt], -1, (0, 255, 0),2)
show('img', img)

opencv ocr,OpenCV,opencv,计算机视觉,人工智能

# 透视变换
def four_point_transform(img, pts):
    p = sorted(pts, key=lambda pts: pts[0, 1], reverse=False)
    p = sorted(p, key=lambda p: p[0, 0], reverse=False)
    tl, bl, tr, br = [i[0] for i in p]
    # 计算边长度
    wA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    wB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    mw = max(int(wB), int(wA))+1

    hA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    hB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    mh = max(int(hB), int(hA))+1

    # 变换后对应坐标位置
    dst = np.array([
        [0, 0],
        [mw-20, 0],
        [mw-20, mh-20],
        [0, mh-20]
    ], dtype="float32")
    # 计算变换矩阵
    rect = np.zeros((4,2), dtype="float32")
    rect[0] = tl.astype(float).tolist()
    rect[1] = tr.astype(float).tolist()
    rect[2] = br.astype(float).tolist()
    rect[3] = bl.astype(float).tolist()
    M = cv2.getPerspectiveTransform(rect, dst)
    warped = cv2.warpPerspective(img, M, (mw, mh))
    return warped

warped = four_point_transform(orig, screenCnt)
show('warped', warped)
# 二值处理
warped = cv2.cvtColor(warped, cv2.COLOR_BGR2GRAY)
ref = cv2.threshold(warped, 180, 255, cv2.THRESH_BINARY)[1]
show('ref', ref)

opencv ocr,OpenCV,opencv,计算机视觉,人工智能
opencv ocr,OpenCV,opencv,计算机视觉,人工智能

OCR识别

import pytesseract
from PIL import Image
cv2.imwrite("ocr.png", ref)
# 下载地址:https://github.com/UB-Mannheim/tesseract/wiki
# tesseract.exe的路径
pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\\tesseract.exe'
# 指定训练集的路径
tessdata_dir_config = r'--tessdata-dir "C:\Program Files\Tesseract-OCR\tessdata"'
test =pytesseract.image_to_string(Image.open("ocr.png"))
print(test)

识别结果:
opencv ocr,OpenCV,opencv,计算机视觉,人工智能

完整代码文章来源地址https://www.toymoban.com/news/detail-799945.html

import cv2  # opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np

def show(name, img):
    cv2.imshow(name, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

img = cv2.imread('tip.png')
# show('img', img)
ratio = img.shape[0] / 500.0
orig = img.copy()

img = cv2.resize(img, (500, int((500 * img.shape[0])/img.shape[1])))
# 预处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (5, 5), 0)
# 边缘检测
edged = cv2.Canny(gray, 75, 200)
# show('edged', edged)
# 轮廓处理
cnts = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)[0]
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:5]  # reverse=True表示倒序(从大到小)

for c in cnts:
    # 计算轮廓近似
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.02*peri, True)
    # 如果近似为一个矩形
    if len(approx) == 4:
        screenCnt = approx
        break

cv2.drawContours(img, [screenCnt], -1, (0, 255, 0), 2)
# show('img', img)

# 透视变换
def four_point_transform(img, pts):
    p = sorted(pts, key=lambda pts: pts[0, 1], reverse=False)
    p = sorted(p, key=lambda p: p[0, 0], reverse=False)
    tl, bl, tr, br = [i[0] for i in p]
    # 计算边长度
    wA = np.sqrt(((br[0] - bl[0]) ** 2) + ((br[1] - bl[1]) ** 2))
    wB = np.sqrt(((tr[0] - tl[0]) ** 2) + ((tr[1] - tl[1]) ** 2))
    mw = max(int(wB), int(wA))+1

    hA = np.sqrt(((tr[0] - br[0]) ** 2) + ((tr[1] - br[1]) ** 2))
    hB = np.sqrt(((tl[0] - bl[0]) ** 2) + ((tl[1] - bl[1]) ** 2))
    mh = max(int(hB), int(hA))+1

    # 变换后对应坐标位置
    dst = np.array([
        [0, 0],
        [mw-20, 0],
        [mw-20, mh-20],
        [0, mh-20]
    ], dtype="float32")
    # 计算变换矩阵
    rect = np.zeros((4,2), dtype="float32")
    rect[0] = tl.astype(float).tolist()
    rect[1] = tr.astype(float).tolist()
    rect[2] = br.astype(float).tolist()
    rect[3] = bl.astype(float).tolist()
    M = cv2.getPerspectiveTransform(rect, dst)
    warped = cv2.warpPerspective(img, M, (mw, mh))
    return warped

warped = four_point_transform(orig, screenCnt)
# show('warped', warped)
# 二值处理
warped = cv2.cvtColor(warped, cv2.COLOR_BGR2GRAY)
ref = cv2.threshold(warped, 180, 255, cv2.THRESH_BINARY)[1]
show('ref', ref)
import pytesseract
from PIL import Image
cv2.imwrite("ocr.png", ref)
# 下载地址:https://github.com/UB-Mannheim/tesseract/wiki
# tesseract.exe的路径
pytesseract.pytesseract.tesseract_cmd = 'C:\Program Files\Tesseract-OCR\\tesseract.exe'
# 指定训练集的路径
tessdata_dir_config = r'--tessdata-dir "C:\Program Files\Tesseract-OCR\tessdata"'
test =pytesseract.image_to_string(Image.open("ocr.png"))
print(test)

到了这里,关于OpenCV(九)--文字扫描OCR识别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Opencv项目实战:01 文字检测OCR(1)

    由图我们可知,对图片进行了数字和字母的识别。 (1)下载Tesseract 点击此网址:tesseract-ocr alternative download - Browse Files at SourceForge.net 我下载的是第四个版本,下载后是zip包的形式,压缩后可安装,选择路径可更改,否则会在默认的C:\\\\Program Files里面,没有什么大的影响。 (

    2024年02月06日
    浏览(29)
  • OpenCV项目1-OCR识别

    文章处理的图片: 思路:我们拿到一张图片不是直接就识别的,而是做一些处理,去除我们不需要的信息,保留我们所需要的信息,再做识别。 通常要做的是对图片进行灰度化处理,再进行滤波,形态学等等去除掉不要的信息。 因为在处理的过程中,我们要对每一步处理后

    2024年02月07日
    浏览(30)
  • 【Python】【OpenCV】OCR识别(三)——字符识别

    通过上一篇博客,我们成功将有角度的图片进行“摆正”,接下来我们来提取图片中的文字。 我们使用Tesseract来处理图片并提取文字,相关下载安装请参考:Python下Tesseract Ocr引擎及安装介绍 - 黯然销魂掌2015 - 博客园 (cnblogs.com) 同时我们需要下载第三方Lib——pytesseract,使用

    2024年02月02日
    浏览(34)
  • 【Python】【OpenCV】OCR识别(一)

    接着练手图像处理例子   抛开网上截图进行OCR识别,更多的图源来自于我们的手机,相机等等设备,而得到的图片都并非是板正的,大多随手一拍的图源都是带有角度的,所以我们需要先将图像进行摆正。 首先先对图像进行预处理,上代码:         1、使用Canny来进行边缘

    2024年02月03日
    浏览(33)
  • 【Python】【OpenCV】OCR识别(二)——透视变换

    对于OCR技术在处理有角度有偏差的图像时是比较困难的,而水平的图像使用OCR识别准确度会高很多,因为文本通常是水平排列的,而OCR算法一般会假设文本是水平的。 针对上述情况,所以我们在处理有角度的图象时,需要将图像“摆正”,将使用到getPerspectiveTransform方法和

    2024年02月03日
    浏览(33)
  • opencv-信用卡数字识别-模板匹配ocr

    2024年02月11日
    浏览(30)
  • ocr之opencv配合paddleocr提高识别率

    背景1:在这篇文章编写之前使用到的工具并不是opencv,而是java原有的工具BufferedImage。但因为在使用过程中会频繁切图,放大,模糊,所以导致的jvm内存使用量巨大,分秒中都在以百兆的速度累加内存空间。这种情况会让程序卡顿,频繁的发生full gc。增加了jvm宕机的不确定性

    2024年04月16日
    浏览(42)
  • 深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景

    【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、

    2024年02月09日
    浏览(44)
  • python毕设选题 - 深度学习OCR中文识别 - opencv python

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年04月09日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包