OpenCv高阶(八)——摄像头调用、摄像头OCR


前言

摄像头 OCR 是指利用摄像头采集图像信息,然后通过光学字符识别(OCR)技术对图像中的文字进行识别和处理的一种技术手段。

一、摄像头调用通用方法

1、导入必要的库

import cv2
import numpy as np

2、创建摄像头接口

读取本地的视频文件或者摄像头,接收的参数为视频文件的地址,或者摄像头的名称(一般0指的是电脑自身的摄像头,1则是外接的摄像头)

video_capture=cv2.VideoCapture('../data/test.avi')

#判断视频文件或者摄像头是否正常读取,如果读取失败则返回提示信息
if not  video_capture.isOpened():
    print("视频打开失败")
    exit()
   

视频以及摄像头文件我们都可以把它理解成老式的电影,一段视频以及摄像头读取的画面都可以看成是一张图片一张图片的播放,只是视频和摄像头的播放速度很快,导致我们视觉上认为动作是连贯的,帧率也就是一秒播放多少张图片。

在这里插入图片描述
因此,在使用opencv读取摄像头和视频文件时我们采用循环的方法来不断获取摄像头读取的画面。
当我们要使用opencv来做视觉方向的问题时,我们就可以调用摄像头,对对读取到的每一帧画面做视觉方面的处理,来达到与摄像头结合的动态效果。

while True:
    ret,frame=video_capture.read()
	#ret是一个标志,检测摄像头是否读取成功,frame则是接收到的画面,是一张一张的图片
	
    if not ret:
        break
	
	#设置这个if判断,是为了手动控制跳出循环,当我们按下ESC键时跳出循环停止读取画面。
    if cv2.waitKey(100)==27:
        break

#释放摄像头资源
video_capture.release()
cv2.destroyAllWindows()

二、摄像头OCR

简单处理文字,将不正的文档扶正并使文档的字迹更清晰。

1.引入库

import numpy as np
import cv2

2、定义函数

(1)定义显示opencv显示函数

def cv_show(name,value):
    cv2.imshow(name,value)
    cv2.waitKey(50)

(2)保持宽高比的缩放函数

def resize(image, width=None, height=None, inter=cv2.INTER_AREA):
	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

(3)坐标点排序函数

def order_points(pts):
    rect = np.zeros((4, 2), dtype="float32")  # 初始化4x2矩阵
    #按顺序找到对应的坐标0123,分别是左上右上右下、左下
    # 计算坐标点x+y的和
    s = pts.sum(axis=1)  # 形状:(4,) ,对矩阵的每一行进行求和操作
    rect[0] = pts[np.argmin(s)]  # 左上角:x+y最小
    rect[2] = pts[np.argmax(s)]  # 右下角:x+y最大
    
    # 计算坐标点x-y的差
    diff = np.diff(pts, axis=1)  # 形状:(4,1)
    rect[1] = pts[np.argmin(diff)]  # 右上角:x-y最小(即y相对较大)
    rect[3] = pts[np.argmax(diff)]  # 左下角:x-y最大(即y相对较小)
    
    return rect  # 返回有序坐标:[左上, 右上, 右下, 左下]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值