IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 做一个菜鸟驿站那种二维码识别、框选及信息展示(本文包括opencv相关函数cap.set()、np.array、reshape、polylines、barcode.rect、putText的相关解析) -> 正文阅读

[人工智能]做一个菜鸟驿站那种二维码识别、框选及信息展示(本文包括opencv相关函数cap.set()、np.array、reshape、polylines、barcode.rect、putText的相关解析)

作者:recommend-item-box type_blog clearfix

0 引言

上一节讲了如何识别本地图像中二维码,读取数据。那么本节就讲讲如何将二维码进行框选,同时将其信息显示在界面上。主要实现效果与校园中菜鸟驿站的出库系统相似。(完整代码附于文末哦~)

1 复制上一节的代码

上一节代码通过pyzbar库,对本地图片的二维码进行解码,已经完成了对二维码信息的读取与识别。那么既然本节要实现在视频中标注,我们需要学会使用opencv的绘画功能。

import cv2 as cv
import numpy as np
from pyzbar.pyzbar import decode
img= cv.imread('C:/Users/liao/Desktop/myqrcode.jpg')
for barcode in decode(img):
    print (barcode.data)
    myData=barcode.data.decode('utf-8')
    print(myData)

2 先调用个摄像头,再调整一下画幅大小

调用摄像头使用cv.VideoCapture()函数(函数详解戳链接https://blog.csdn.net/weixin_48623445/article/details/119192434?spm=1001.2014.3001.5501),捕获到一个摄像头。
再通过函数从cap.set(propId, value)函数,进行显示窗口的画幅调整。例:

import cv2 as cv
import numpy as np
from pyzbar.pyzbar import decode
cap=cv.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)

cap.set()中有两个参数,其中的propld是cv::VideoCaptureProperties 的属性标识符,简单讲即为我们要更改视频的相关属性。如例子中的3、4,就分别对应视频流中的帧宽度与帧高度。
所以,我们如果通过函数cap.set()来改变画幅,第一个参数输入的3和4就是告诉电脑我们要改变视频的宽与高;而第二个参数即是对于前述的两个属性需要更改为多少的命令。我们这程序即为将画幅定为640x480;

3 开始给捕获到的二维码加个框框

opencv中绘制包裹住二维码的方法有很多,比如绘制矩形、绘制多边形;如果是选择矩形框框,识别时二维码存在的倾斜角度会导致添加的框框不能跟着倾斜,不是我们想要的效果,因此我们选用绘制多边形。
绘制多边形,首先要得到二维码的四个顶点坐标,再进行绘制。在这里代码主要分为三行:

        pts=np.array([barcode.polygon],np.int32)
        pts=pts.reshape((-1,1,2))
        cv.polylines(img,[pts],True,(255,0,255),5)

第一行使用numpy库中array函数,得到一个四点数据矩阵。其中barcode.polygon作用是从轮廓中提取polygon点,作为顶点;np.int32则是对于数据的类型约束。
第二行的reshape((-1,1,2))函数,主要功能是将原有的数据形状转换为opencv中常用的形状:(x,1,y),便于使用。如将(4,2)转换为(4,1,2)。
第三行则是正式的绘画过程,使用cv.ploylines函数,绘制了一个闭合、紫色、宽度为五的四边形。该函数标准形式是:polylines(img, pts, isClosed, color, thickness, lineType, shift),括号中的参数分别是表示:显示的图像、多边形顶点数组、折线是否闭合(闭合为True、不闭合为False)、线条颜色、线条粗细、线形、顶点坐标中的小数位数。

4 在框框上写上读取的内容

在图像中写字主要使用的是cv.putText()函数,该函数参数也比较多(因为要限制那么多变量嘛,比如字体、颜色啥的),还有一个就是要对于pts点集做一定的处理,因为正与上面的情况相反,我们要保证显示的字不能倾斜呀。所以,要提取一个起点,不让字跟着二维码倾斜。例:

pts2=barcode.rect
cv.putText(img,myData,(pts2[0],pts2[1]),cv.FONT_HERSHEY_SIMPLEX,0.9,(255,0,255),2)

barcode.rect()即为处理方法,它主要功能是画一个可以包裹整个二维码的最小水平矩形,效果如图所示:
在这里插入图片描述

得到大矩形框后,矩形框的左上角顶点则为我们文本插入的水平基准,也就是(pts2【0】、pts2【1】)。故使用cv.putText()函数,来添加文本。该函数的标准形式为:putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin),括号中的参数分别为:插入文本的图像、插入文本的内容、图像中文本字符串的左下角(输入文本的起点)、字体类型、字体比例因子乘以字体特定的基本大小、文本颜色、用于绘制文本的线条的粗细、线型、 bottomLeftOrigin 当为真时,图像数据原点位于左下角。注:部分参数程序中未使用,大家可以去尝试尝试。

5 附上全部代码

到此为止,你也可以做一个菜鸟驿站那样的二维码识别啦!效果图如下下:

import cv2 as cv
import numpy as np
from pyzbar.pyzbar import decode
cap=cv.VideoCapture(0)
cap.set(3,640)
cap.set(4,480)
while True:
    success,img=cap.read()
    if not success:
        print('capture the camera failed...')
        break
    for barcode in decode(img):
        myData=barcode.data.decode('utf-8')
        print(myData)
        pts=np.array([barcode.polygon],np.int32)
        pts=pts.reshape((-1,1,2))
        cv.polylines(img,[pts],True,(255,0,255),5)
        pts2=barcode.rect
        cv.putText(img,myData,(pts2[0],pts2[1]),cv.FONT_HERSHEY_SIMPLEX,0.9,(255,0,255),2)
    cv.imshow('Result',img)
    cv.waitKey(1)

在这里插入图片描述

注:其中部分未讲的函数,在前几章均有讲述,有兴趣的朋友可以去康康~也欢迎对于文章内容有自己见解的朋友,留言探讨。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 11:10:51  更:2021-08-03 11:14:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 15:15:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码