<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
OpenCV在V4.5.3版本的contrib包中提供了一個barcode::BarcodeDetector類,用於條形碼的識別。
構造方法
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() )
img | 包含條形碼的灰度或彩色 (BGR) 影象。 |
decoded_info | UTF8 編碼的字串輸出向量或字串的空向量(如果程式碼無法解碼)。 |
decoded_type | BarcodeType 的向量,指定這些條形碼的型別 |
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_contribmodulesbarcodesrcbarcode.cpp
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.png"); 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條碼檢測器內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45