点击上方蓝字关注我们
微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识
前言
之前OpenCV的条码与二维码解析算法支持,一直在扩展模块中,在OpenCV4.8中已经被移到发布版本中了。这样的好处就是再也不用编译扩展模块的源码去支持条码与二维码检测了,直接下载OpenCV安装包,配置好开发环境以后就可以调用相关函数直接完成条码与二维码解析了
基本原理
OpenCV中的二维码解析算法是来自微信二维码解析团队的开源贡献,支持预处理、检测、解析。整个处理流程集成了两个轻量化的CNN模型分别完成检测定位与超分辨率预处理,然后再基于传统方法检查定位,最后基于ZXING开源基础上完成解码操作。检测基于的一个非常轻量化的SSD检测模型,结构如下:
超分辨率的模型结构如下,大小只有24K
传统的QR码结构化分析定位测量:
相关的详解说明参考这里:https://github.com/WeChatCV/opencv_3rdparty/tree/wechat_qrcode
QR码解码演示
基于OpenCV4.8的二维码扫码演示
实现代码如下:cv::Mat src = cv::imread("D:/opencvxuetang.png");
// 初始化
std::shared_ptr<cv::QRCodeDetector> detector(new cv::QRCodeDetector());
std::vector<cv::Point> pts;
std::vector<std::vector<cv::Point>> contours;
// 检测QR码
detector->detect(src, pts);
std::cout << "boxes: "<< pts << std::endl;
contours.push_back(pts);
// 解析QR码
std::string codetxt = detector->decode(src, pts);
std::cout << "decode text: " << codetxt << std::endl;
cv::drawContours(src, contours, -1, cv::Scalar(0, 0, 255), 2, 8);
cv::imshow("QR Code解码", src);
一维条码解码演示
OpenCV中的条码检测主要是基于ZBar跟ZXING开源的基础上修改而来,支持多种一维码的检测,同时还支持多码检测,代码演示运行如下:
实现代码如下:
// 定义
cv::Mat image = cv::imread("D:/barcode.png");
std::shared_ptr<cv::barcode::BarcodeDetector> barcode_detector(new cv::barcode::BarcodeDetector());
// 检测
vector<Point> corners;
barcode_detector->detect(image, corners);
std::cout << "barcode location: " << corners << std::endl;
// 解码
std::string barcode_txt = barcode_detector->decode(image, corners);
std::cout << "decode text: " << barcode_txt << std::endl;
// 显示
contours.clear();
contours.push_back(corners);
cv::drawContours(image, contours, -1, cv::Scalar(0, 0, 255), 2, 8);
cv::imshow("barcode", image);
学习 OpenCV4.8 图像与视频分析、特征提取与DNN部分,请扫码查看视频教程
全网最高性价比的Pytorch框架CV开发课程,错过了不是时间,而是给自己改变的机会!感兴趣,现在扫码查看课程目录!
原价: 398优惠价格:299 元
|