OpenCV每日函数之BarcodeDetector类条码检测器

目录

一、概述

二、类参考

1、函数原型

2、参数详解

三、OpenCV源码

1、源码路径

2、源码代码

四、效果图像示例

一、概述

OpenCV在V4.5.3版本的contrib包中提供了一个barcode::BarcodeDetector类,用于条形码的识别。

二、类参考 1、函数原型

构造方法

cv::barcode::BarcodeDetector::BarcodeDetector(const std::string & prototxt_path = "", const std::string & model_path = "" )

decode方法

bool cv::barcode::BarcodeDetector::decode(InputArray img, InputArray points, std::vector< std::string > & decoded_info, std::vector< BarcodeType > & decoded_type )

detect方法

bool cv::barcode::BarcodeDetector::detect(InputArray img, OutputArray points )

detectAndDecode方法

bool cv::barcode::BarcodeDetector::detectAndDecode(InputArray img, std::vector< std::string > & decoded_info, std::vector< BarcodeType > & decoded_type, OutputArray points = noArray() ) 2、参数详解
img包含条形码的灰度或彩色 (BGR) 图像。
decoded_infoUTF8 编码的字符串输出向量或字符串的空向量(如果代码无法解码)。
decoded_typeBarcodeType 的向量,指定这些条形码的类型
points找到的条形码矩形的顶点的可选输出向量。 如果找不到,则为空。

支持的条形码类型如下。

enum cv::barcode::BarcodeType { cv::barcode::NONE, cv::barcode::EAN_8, cv::barcode::EAN_13, cv::barcode::UPC_A, cv::barcode::UPC_E, cv::barcode::UPC_EAN_EXTENSION } 三、OpenCV源码 1、源码路径 opencv_contrib\modules\barcode\src\barcode.cpp 2、源码代码 bool BarcodeDetector::detect(InputArray img, OutputArray points) const { Mat inarr; if (!checkBarInputImage(img, inarr)) { points.release(); return false; } Detect bardet; bardet.init(inarr); bardet.localization(); if (!bardet.computeTransformationPoints()) { return false; } vector<vector<Point2f>> pnts2f = bardet.getTransformationPoints(); vector<Point2f> trans_points; for (auto &i : pnts2f) { for (const auto &j : i) { trans_points.push_back(j); } } updatePointsResult(points, trans_points); return true; } bool BarcodeDetector::decode(InputArray img, InputArray points, vector<std::string> &decoded_info, vector<BarcodeType> &decoded_type) const { Mat inarr; if (!checkBarInputImage(img, inarr)) { return false; } CV_Assert(points.size().width > 0); CV_Assert((points.size().width % 4) == 0); vector<vector<Point2f>> src_points; Mat bar_points = points.getMat(); bar_points = bar_points.reshape(2, 1); for (int i = 0; i < bar_points.size().width; i += 4) { vector<Point2f> tempMat = bar_points.colRange(i, i + 4); if (contourArea(tempMat) > 0.0) { src_points.push_back(tempMat); } } CV_Assert(!src_points.empty()); vector<Mat> bar_imgs = p->initDecode(inarr, src_points); BarDecode bardec; bardec.init(bar_imgs); bardec.decodeMultiplyProcess(); const vector<Result> info = bardec.getDecodeInformation(); decoded_info.clear(); decoded_type.clear(); bool ok = false; for (const auto &res : info) { if (res.format != NONE) { ok = true; } decoded_info.emplace_back(res.result); decoded_type.emplace_back(res.format); } return ok; } bool BarcodeDetector::detectAndDecode(InputArray img, vector<std::string> &decoded_info, vector<BarcodeType> &decoded_type, OutputArray points_) const { Mat inarr; if (!checkBarInputImage(img, inarr)) { points_.release(); return false; } vector<Point2f> points; bool ok = this->detect(img, points); if (!ok) { points_.release(); return false; } updatePointsResult(points_, points); decoded_info.clear(); decoded_type.clear(); ok = this->decode(inarr, points, decoded_info, decoded_type); return ok; } 四、效果图像示例 示例图像

参考代码,opencvsharp版本的需要打开barcode并重新编译,所以使用c++代码进行示例。

cv::Mat mata = cv::imread("barcode.webp"); cv::barcode::BarcodeDetector barcode; std::vector<string> info; std::vector<cv::barcode::BarcodeType> type; Mat points; barcode.detectAndDecode(mata, info, type, points);

识别结果,可以看到第一个和第三个识别结果正确,不知道是否是放在一起的原因,下面把另外两个裁剪出来识别看看。

最后一个没有识别出来

把最后一个单独裁剪出来在测试下也没有识别出来,不过UPCE类型的应该支持才对,暂时不进行深究。

到此这篇关于OpenCV每日函数BarcodeDetector条码检测器的文章就介绍到这了,更多相关OpenCV条码检测器内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    excel怎么用乘法函数

    excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、首先用鼠标选中要计算的单元格。2、然后选中单元格后点击左上方工具栏的fx公

    excel中乘法函数是什么?

    excel中乘法函数是什么?,乘法,函数,什么,打开表格,在C1单元格中输入“=A1*B1”乘法公式。以此类推到多个单元。1、A1*B1=C1的Excel乘法公式

    标准差excel用什么函数?

    标准差excel用什么函数?,函数,标准,什么,在数据单元格的下方输入l标准差公式函数公式“=STDEVPA(C2:C6)”。按下回车,求出标准公差值。详细

    2010年底DIY硬件总结和安装参考

    2010年底DIY硬件总结和安装参考,,它似乎只是一眨眼的功夫从过去的最后一眼。看看现在的岗位似乎就在昨天,但看看当年的内容是真的走了,如果

    excel常用函数都有哪些?

    excel常用函数都有哪些?,函数,哪些,常用,1、SUM函数:SUM函数的作用是求和。函数公式为=sum()例如:统计一个单元格区域:=sum(A1:A10)  统计多个

    ps图形放大快捷键|PS放大图像快捷键

    ps图形放大快捷键|PS放大图像快捷键,,1. PS放大图像快捷键具体步骤如下:1.打开PS软件,打开一张图片,点击放大镜,点击+号。2.直接使用+号放大