zbar本身自带检测二维码条形码功能,这里使用opencv只是做一些简单的读取图片,灰度图片以及显示条形码和二维码时用到一些绘制

// barcode-qrcodescanner.cpp: 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <zbar.h>
#pragma comment( lib,"winmm.lib" )
using namespace std; typedef struct
{
string type;
string data;
vector <cv::Point> location;
} decodedObject; // 识别条形码或二维码
void decode(cv::Mat &im, vector<decodedObject>&decodedObjects)
{ // 创建zbar 扫描检测对象
zbar::ImageScanner scanner; // 配置扫描器
scanner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, ); // 图片转为灰度图
cv::Mat imGray;
cv::cvtColor(im, imGray, cv::COLOR_BGR2GRAY); // 将图片数据转换为zbar图片对象
zbar::Image image(im.cols, im.rows, "Y800", (uchar *)imGray.data, im.cols * im.rows); // 扫描检测
int n = scanner.scan(image); // 打印检测结果
for (zbar::Image::SymbolIterator symbol = image.symbol_begin(); symbol != image.symbol_end(); ++symbol)
{
decodedObject obj; obj.type = symbol->get_type_name();
obj.data = symbol->get_data(); // 检测到的对象类型和数据
cout << "Type : " << obj.type << endl;
cout << "Data : " << obj.data << endl << endl; // 对象所处的位置
for (int i = ; i < symbol->get_location_size(); i++)
{
obj.location.push_back(cv::Point(symbol->get_location_x(i), symbol->get_location_y(i)));
} decodedObjects.push_back(obj);
}
} // 显示条形码和二维码在图片中的区域
void display(cv::Mat &im, vector<decodedObject>&decodedObjects)
{
for (int i = ; i < decodedObjects.size(); i++)
{
vector<cv::Point> points = decodedObjects[i].location;
vector<cv::Point> hull; if (points.size() > )
convexHull(points, hull);
else
hull = points; int n = hull.size(); for (int j = ; j < n; j++)
{
cv::line(im, hull[j], hull[(j + ) % n], cv::Scalar(, , ), );
} } // 显示结果
cv::imshow("Results", im);
cv::waitKey(); } int main(int argc, char* argv[])
{ // opencv读取图片
cv::Mat im = cv::imread("zbar-test.jpg"); vector<decodedObject> decodedObjects; // 查找二维码或条形码
decode(im, decodedObjects); // 显示位置
display(im, decodedObjects); return EXIT_SUCCESS;
}

这里用到zbar所以需要去下载一个zbar库,因为我用的是vs2017并且项目配置的是x64位。这里有个配置好的需要的下载

zbar+opencv检测图片中的二维码或条形码的更多相关文章

  1. 基于opencv 识别、定位二维码 (c++版)

    前言 因工作需要,需要定位图片中的二维码:我遂查阅了相关资料,也学习了opencv开源库.通过一番努力,终于很好的实现了二维码定位.本文将讲解如何使用opencv定位二维码. 定位二维码不仅仅是为了识 ...

  2. 基于Opencv识别,矫正二维码(C++)

    参考链接 [ 基于opencv 识别.定位二维码 (c++版) ](https://www.cnblogs.com/yuanchenhui/p/opencv_qr.html) OpenCV4.0.0二 ...

  3. javascript利用canvas解析图片中的二维码

    本方法两种应用方式:一种使用canvas解析本站图片中的二维码,canvas有同源策略限制,只能处理本站图片.另一种处理文件选择中的图片二维码. 第一种使用场景可以换成像微信中一样,长按图片识别二维码 ...

  4. 【Demo】 生成二维码 和 条形码

    条形码 和 二维码 对比 一维条形码只是在一个方向(一般是水平方向)表达信息,而在垂直方向则不表达任何信息,其一定的高度通常是为了便于阅读器的对准. 在水平和垂直方向的二维空间存储信息的条形码, 称为 ...

  5. android 项目学习随笔二十一(IM、语音识别、机器人、统计、扫描二维码、条形码)

    语音识别:科大讯飞语音云 http://www.xfyun.cn/ 语音机器人模拟 public class TalkBean { public String text; public boolean ...

  6. Android二维码开源项目zxing用例简化和生成二维码、条形码

    上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...

  7. iOS - 原生的CIFilter生成二维码和条形码

    使用CIFilter可以不引入任何第三方库,就可以生成想要的二维码和条形码,今天简单的介绍一下使用CIFilter生成二维码和条形码.系统CIFilter生成的二维码和条形码的大小有时并不能满足需求, ...

  8. iOS8 生成二维码与条形码

    iOS8 生成二维码与条形码 效果图: 源码: // // ViewController.m // CodeCreator // // Created by YouXianMing on 15/3/1 ...

  9. iOS二维码、条形码生成(可指定大小、颜色)

    一.前言: iOS7.0之后可以利用系统原生 API 生成二维码, iOS8.0之后可以生成条形码, 系统默认生成的颜色是黑色. 在这里, 利用以下方法可以生成指定大小.指定颜色的二维码和条形码, 还 ...

随机推荐

  1. 使用struts2进行登录功能的开发

    使用struts2进行登录功能的开发 一. 设计需求 使用idea和maven开发具有登录功能的web应用,java语言,使用struts2框架. 二. 设计步骤 1.使用idea创建maven应用, ...

  2. PHP常用函数拾遗

     PHP中常用过滤函数addslashes().mysql_real_escape_string().mysql_escape_string() 如addslashes().mysql_real_es ...

  3. vue项目使用websocket做聊天项目总结

    一.首先我们先了解一下websocket的使用: 1.创建websocket const ws = new WebSocket("ws://192.168.31.136:9998/ws&qu ...

  4. 使用 AT 指令进行 Socket 通信

    BC26 支持使用 Socket 进行 TCP 和 UDP 协议通信,这两个协议也是 BC26 支持的众多通信协议的基础.本文讲解如何使用这两个协议与服务器端进行通信.在学习这篇文章前,请首先使用AT ...

  5. 记一次ftp错误

    在一个ftp上,突然登不上 报错,使用浏览器登录,报此用户不是私密连接,然后使用服务器客户端登录尝试,错误信息如下: [root@test ~]# ftp *.*.*.* Connected to * ...

  6. 第一次看CCControl

    Control中有九种可能的事件,定义在.h文件中,另外还定义四种状态,用来表示控件高亮等. 在初始化控件的时候: bool Control::init() { if (Layer::init()) ...

  7. $HDU1846\ Brave\ Game$ 博弈论

    正解:博弈论 解题报告: 传送门! 巴什博奕板子题鸭$QwQ$ 就有个结论,是说当$(m+1)\mid n$时先手必败,否则必胜 这个瞎证明一下就能出来 就考虑当$(m+1)\mid 1$时,若先手取 ...

  8. ThreadLocal源码阅读

    package java.lang; import java.lang.ref.WeakReference; import java.util.Objects; import java.util.co ...

  9. 「USACO15FEB」Censoring (Silver) 审查(银) 解题报告

    题面 就是让你--在字符串A中,如果字符串B是A的子串,那么就删除在A中第一个出现的B,然后拼接在一起,一直重复上述步骤直到B不再是A的子串 |A|\(\le 10^6\) 思路: KMP+栈 1.由 ...

  10. 1025 反转链表 (25 分)C语言

    题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为 3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5 ...