基于OpenCV和数字图像处理的图像识别项目——文档扫描识别

图像预处理部分

处理原始图像,原始图像可能非常的不规整,且图片亮度上比较灰暗,所以要想进行准确的ocr识别,需要事先处理下原始图像。主要包括下面几个操作:

  1. 首先通过边缘检测,识别出需要识别的框体部分,即去掉冗余的背景啥的
  2. 通过轮廓检测,锁定框体外部的矩形框
  3. 透视变换操作,把矩形框及以内的内容进行规整

下面就是每一步的具体操作

import numpy as np
import cv2

def cv_show(title, img):
    cv2.imshow(title, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def resize(image, width=None, height=None, inter=cv2.INTER_AREA):
    """resize函数之所以自定义,是可以只指定高度或者高度
        原理就是: 
        如果只指定某一个维度,图片的高度和宽度都会同比例缩小,比如指定height,那就宽度变成height/float(h)*w, 高度为height, 指定width同理
        如果都指定, 那么就按照实际的大小resize
    """
    dim = None
    (h, w) = image.shape[:2]
    if width is None and height is None:
        return image
    if width is None:
        r = height / float(h)
        dim = (int(w*r), height)
    else:
        r = width / float(w)
        dim = (width, int(h*r))
    resized = cv2.resize(image, dim, interpolation=inter)
    return resized

# 读取图片
image = cv2.imread("images/receipt.jpg")  
cv_show('img', image)     # 原始图片是2448*3264, 太大了,下面需要进行resize操作


# resize操作之前,需要保存resize的比例,以及原始图像
# 下面要按照500的比例对图像进行resize, 那么原始图像的每个像素点的位置都会改变,记住ratio是为了最终能还原到原始的位置上去
ratio = image.shape[0] / 500.0
orig = image.copy()


image = resize(orig, height=500)
cv_show('img', image)

边缘检测

# 预处理 转成灰度图 -> 高斯滤波 -> Canny边缘检测
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
#gray = cv2.GaussianBlur(gray, (5, 5), 0)   边缘检测算法其实就是用的高斯滤波,所以这里这个不用发现更加清晰些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕业小助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值