利用可见光传输信息
主要流程实现:
编码部分
读取待测文件导入字符串后,给字符串加入crc校验码,接着分别在开头加入起始码和结束码
对二维码识别及创建等相关函数
寻找二维码边框轮廓:对图像进行灰度图处理;
将图片进行滤波处理,目的是排除一些椒盐噪音(除去雪花);
进行黑白二值化处理,以255的一半(127)为界限,进行二值化
我们采用4个定位码进行定位,分别为三个大的定位码和在右下角一个小的定位码,根据定位小定位码的位置进行扭转,使图片回正方便读取
定位二维码需要判断三个定位点的位置和角度关系,二维码示例如下:
大的二维码分别在左上,右上,左下三个位置,首先定位4个定位码的位置,通过cv2内置的函数findContours找出所有矩形
再通过判断矩形是否存在大回型和小回型确认找到定位点
找出三个大定位点的中心距,利用余弦定理,即三个大定位点的中心距为等腰直角三角形确认位置
由于视频可能翻转,按照顺时针确定四个定位点的位置,然后将图片校正
放大图片,由于cv2.resize放大图片一定会出现模糊情况,使用直接对nparray放大。
rgb三通道需要加入掩膜码,我们加入000型掩膜码
最后将图片转视频
二维码编码部分基本完成
解码部分
解码是编码的反过程,解码通过对空图片进行检测,以确定解码开始。识别开始码将数据导出,解crc解掩膜,最后记录在文件里