在家太闲,因此想找点事干,突然想起来我可以拍拍视频找机会挣个外快,于是我就思考了一下,找到了一个比较常见、简单但需要一定门槛的东西。
最终决定,那就做一个二维码扫描吧。
项目视频教程地址:https://www.bilibili.com/video/BV1La4y1t7bQ
开源地址:https://gitee.com/JogerQiao/joger_python_learning_code_record.git
效果展示
代码说明
整体代码思路是这样的:
- 通过三层轮廓找到三个以上的疑似定位点
- 使用面积比确定大概率疑似定位点
- 使用判断三个点是否组成直角三角形判断是否是疑似定位点
- 通过规律和右手定则计算三个点的顺序(直角点为1,之后顺时针依次)
- 使用仿射变换将二维码矫正到标准姿态,以便后期读取。
代码详解
本次使用的库包括:
1 |
|
对图像文件进行打开、灰度和二值化处理并获取轮廓:
1 |
|
对保存层级关系的轮廓hierarchy
遍历,并找到有三级的且符合面积比为49:25:9
关系的轮廓:
1 |
|
在找到有可能是的轮廓中的中心点,并对这些点进行排序,满足
- 直角点为p1,之后顺时针依次为p2,p3的排列方式
1 |
|
之后求出仿射变换的目标点、变换矩阵并进行变换
1 |
|