精华内容
参与话题
问答
  • OpenCV+zbar开源库实现摄像头识别二维码,测试验证识别率非常高,已实现简单的应用。 打包源码在VS2013下可以完全编译成功,附加包含OpenCV库及zbar-0.10-setup.exe,zbar-0.10.tar.bz2 下载Demo后需要安装 zbar-...
  • zBar库下载,包含原文件,及64位编译可执行lib。按opencv方式配置include和lib。如果缺dll,添加文件夹中的。可以运行的。
  • Zbar识别QRcode解读

    千次阅读 2018-11-14 21:20:29
    Zbar条码解码器 Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR...

    Zbar条码解码器

    Zbar条码解码器是一个开源的二维码(包括条形码)解码器,可以识别来至于视频流,图像文件、手持扫码器和视频设备(如摄像头)等二维码识别,支持EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, QR Code(二维码)等常用编码方式的条形码/二维码。
    安装教程:https://mp.csdn.net/mdeditor/84074167#
    条形码与二维码介绍:https://mp.csdn.net/mdeditor/84074271#

    Zbar算法流程

    首先是算法的初始化,构造一个扫描器ImageScanner对象,并使用其set_config()方法对扫描器进行初始化:

    ImageScanner scanner;
    // configure the reader
    scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);
    

    接下来是载入图像,可以使用 ImageMagick 和 OpenCV 读取图片文件,并将其转换为灰度图像,以下以 OpenCV 为例:

    IplImage *img = cvLoadImage("E:\\ 文档 \\ 测试素材 _ 一维码二维码 \\QRCODE\\2-1.jpg");
    IplImage *imgGray = cvCreateImage(cvGetSize(img), 8, 1);
    cvCvtColor(img, imgGray, CV_RGB2GRAY);
    

    构造一个图像Image对象,并调用其构造函数对其进行初始化:

    int width = imgGray->widthStep;
    int height = imgGray->height;
    Image image(width, height, "Y800", imgGray->imageData, width * height);
    

    图像解析,通过调用图像扫描器对象的scan()方法,对图像对象进行处理:

    int n = scanner.scan(image);
    

    图像扫描,扫描器对象公有方法scan()主要为zbar_scan_image()函数,函数首先对传入的图像进行配置校验,然后对传入图像先进行逐行扫描,扫描路径为 Z 字型:

    while(y < h) {
        iscn->dx = iscn->du = 1;
        iscn->umin = 0;
        while(x < w) {
            uint8_t d = *p;
            movedelta(1, 0);
            zbar_scan_y(scn, d);
        }
        quiet_border(iscn);
        movedelta(-1, density);
        iscn->v = y;
        if(y >= h)
            break;
        iscn->dx = iscn->du = -1;
        iscn->umin = w;
        while(x >= 0) {
            uint8_t d = *p;
            movedelta(-1, 0);
            zbar_scan_y(scn, d);
        }
        ASSERT_POS;
        quiet_border(iscn);
        movedelta(1, density);
        iscn->v = y;
    }
    

    扫描的主要函数为zbar_scan_y(),在函数内部,以一个像素点为增量在一行内一点一点扫描过去,并且完成滤波,求取边缘梯度,梯度阈值自适应,确定边缘,转化成明暗宽度流。其中确定边缘之后调用process_edge()函数:

    if(y1_rev)
        edge = process_edge(scn, y1_1);
    

    在process_edge()函数内部,使用当前边缘跟上一次保存下来的边缘相减得到一个宽度,并将其保存到扫描器结构变量scn中并将本次边缘信息保存下来:

    scn->width = scn->cur_edge - scn->last_edge;
    scn->last_edge = scn->cur_edge;
    

    之后对扫描器结构变量scn中保存下来的明暗宽度流进行处理,处理函数为zbar_decode_width(scn->decoder, scn->width),该函数内部处理对象为当前行目前保存下来的宽度流,通过计算各宽度之间的宽度信息提取扫码特征,依次通过几种一维码二维码的检测标准,寻找到符合标准的扫码种类时更新扫描器结构变量scn中的type成员,并且更新lock成员以增加当前种类判断的置信度(可以通过设置关掉其他种类的条码识别):

    #ifdef ENABLE_EAN
        if((dcode->ean.enable) &&
        (sym = _zbar_decode_ean(dcode)))
            dcode->type = sym;
    #endif
    #ifdef ENABLE_CODE39
        if(TEST_CFG(dcode->code39.config, ZBAR_CFG_ENABLE) &&
        (sym = _zbar_decode_code39(dcode)) > ZBAR_PARTIAL)
        {
            dcode->type = sym;
        }
    #endif
    #ifdef ENABLE_CODE128
        if(TEST_CFG(dcode->code128.config, ZBAR_CFG_ENABLE) &&
        (sym = _zbar_decode_code128(dcode)) > ZBAR_PARTIAL)
            dcode->type = sym;
    #endif
    #ifdef ENABLE_I25
        if(TEST_CFG(dcode->i25.config, ZBAR_CFG_ENABLE) &&
        (sym = _zbar_decode_i25(dcode)) > ZBAR_PARTIAL)
            dcode->type = sym;
    #endif
    #ifdef ENABLE_PDF417
        if(TEST_CFG(dcode->pdf417.config, ZBAR_CFG_ENABLE) &&
        (sym = _zbar_decode_pdf417(dcode)) > ZBAR_PARTIAL)
            dcode->type = sym;
    #endif
    #ifdef ENABLE_QRCODE
        if(TEST_CFG(dcode->qrf.config, ZBAR_CFG_ENABLE) &&
        (sym = _zbar_find_qr(dcode)) > ZBAR_PARTIAL)
            dcode->type = sym;
    #endif
    

    以 QR 码为例子,函数_zbar_find_qr(dcode)内部对当前行的宽度流进行计算,判断是否符合下列特征:

    qr_finder_t *qrf = &dcode->qrf;
    qrf->s5 -= get_width(dcode, 6);
    qrf->s5 += get_width(dcode, 1);
    unsigned s = qrf->s5;
    if(get_color(dcode) != ZBAR_SPACE || s < 7)
    return ZBAR_NONE;
    int ei = decode_e(pair_width(dcode, 1), s, 7);
    if(ei)
    goto invalid;
    ei = decode_e(pair_width(dcode, 2), s, 7);
    if(ei != 2)
    goto invalid;
    ei = decode_e(pair_width(dcode, 3), s, 7);
    if(ei != 2)
    goto invalid;
    ei = decode_e(pair_width(dcode, 4), s, 7);
    if(ei)
    goto invalid;
    invalid:
    return ZBAR_NONE;
    

    符合当前特征的即判断其不为 QR 码,如果不符合,将当前宽度流描述为一个自定义的线段结构,包含两端端点及长度等信息,并将满足条件的横向线段结构变量存入一个容器lines的横向线段集合中。对整幅图像的逐列扫描同逐行扫描一样,扫描路径为 N 字型,同样通过函数zbar_scan_y()和process_edge()进行处理找边缘最后求取出纵向的明暗高度流,通过zbar_decode_width(scn-> decoder, scn->width)函数进行处理,将符合 QR 码的纵向线段存入lines的纵向线段集合中。

    QR码解析,QR 码解析模块的入口为函数_zbar_qr_decode(iscn->qr, iscn, img),函数内部结构如下:

    int nqrdata = 0;
    qr_finder_edge_pt *edge_pts = NULL;
    qr_finder_center *centers = NULL;
    if(reader->finder_lines[0].nlines < 9 ||
    reader->finder_lines[1].nlines < 9)
    return(0);
    int ncenters = qr_finder_centers_locate(¢ers, &edge_pts, reader, 0, 0);
    if(ncenters >= 3) {
    void *bin = qr_binarize((unsigned char*)img->data, img->width, img->height);
    qr_code_data_list qrlist;
    qr_code_data_list_init(&qrlist);
    qr_reader_match_centers(reader, &qrlist, centers, ncenters,
    (unsigned char*)bin, img->width, img->height);
    if(qrlist.nqrdata > 0)
    nqrdata = qr_code_data_list_extract_text(&qrlist, iscn, img);
    qr_code_data_list_clear(&qrlist);
    free(bin);
    }
    if(centers)
    free(centers);
    if(edge_pts)
    free(edge_pts);
    return(nqrdata);
    

    首先第一步需要求出 QR 码的三个定位图案的中心,需要对之前求出的横向,纵向线段集合进行筛选,聚类和求取交叉点:

    int ncenters = qr_finder_centers_locate(¢ers, &edge_pts, reader, 0, 0);
    

    函数返回的是共找到多少个交叉点,如果小于三个则此图像无法进行 QR 码解析。 之后对图像进行自适应二值化处理:

    void *bin = qr_binarize((unsigned char*)img->data, img->width, img->height);
    

    之后就是解码的主要组成部分,对 QR 码进行码字读取:

    qr_reader_match_centers(reader, &qrlist, centers, ncenters,(unsigned char*)bin, img->width, img->height);
    

    函数首先对找到的交叉点按时针顺序进行排序,三个点进行仿射变化求出 QR 码模块宽度(所占像素个数):

    version=qr_reader_try_configuration(_reader,&qrdata,_img,_width,_height,c);
    

    函数返回值为 QR 码的版本数,并且求出了 QR 码的版本码字和模块宽度(根据三个交叉点处于同边的两个点来计算,仿射变化有单应性仿射 affine homography 和全矩阵仿射 full homography ),将所求得的所有结果进行计算和比对,最终的出 QR 码的版本结果,还需要判断求出结果数是否大于等于 7 。如果是,求得的版本信息是经过编码后的信息,版本号还需要解码;如果小于 7 ,求出来的结果即是 QR 码的版本号:

    if(ur.eversion[1]==dl.eversion[0]&&ur.eversion[1]<7){
    ur_version=ur.eversion[1];
    }
    else{
    if(abs(ur.eversion[1]-dl.eversion[0])>QR_LARGE_VERSION_SLACK)
    continue;
    }
    if(ur.eversion[1]>=7-QR_LARGE_VERSION_SLACK){
    ur_version=qr_finder_version_decode(&ur,&hom,_img,_width,_height,0);
    if(abs(ur_version-ur.eversion[1])>QR_LARGE_VERSION_SLACK)
    ur_version=-1;
    }
    else
    ur_version=-1;
    if(dl.eversion[0]>=7-QR_LARGE_VERSION_SLACK){
    dl_version=qr_finder_version_decode(&dl,&hom,_img,_width,_height,1);
    if(abs(dl_version-dl.eversion[0])>QR_LARGE_VERSION_SLACK)
    dl_version=-1;
    }
    else
    dl_version=-1;
    if(ur_version>=0){
    if(dl_version>=0&&dl_version!=ur_version)
    continue;
    }
    else if(dl_version<0)
    continue;
    else
    ur_version=dl_version;
    }
    

    之后求 QR 码的格式信息:

    fmt_info=qr_finder_fmt_info_decode(&ul,&ur,&dl,&hom,_img,_width,_height);
    

    格式信息求出来之后就是 QR 码的功能区到目前为止已全部识别并解码出结果,之后对 QR 码的数据区进行解析,函数为:

    qr_code_decode(_qrdata,&_reader->gf,ul.c->pos,ur.c->pos,dl.c->pos,ur_version,fmt_info,_img,_width,_height)
    

    函数注释为:

    /*Attempts to fully decode a QR code.
    _qrdata: Returns the parsed code data.
    _gf: Used for Reed-Solomon error correction
    _ul_pos: The location of the UL finder pattern.
    _ur_pos: The location of the UR finder pattern.
    _dl_pos: The location of the DL finder pattern.
    _version: The (decoded) version number.
    _fmt_info: The decoded format info.
    _img: The binary input image.
    _width: The width of the input image.
    _height: The height of the input image.
    Return: 0 on success, or a negative value on error.*/
    static int qr_code_decode(qr_code_data *_qrdata,const rs_gf256 *_gf,
    const qr_point _ul_pos,const qr_point _ur_pos,const qr_point _dl_pos,
    int _version,int _fmt_info,
    const unsigned char *_img,int _width,int _height)
    

    首先对对图像进行消除掩模处理,并且识别出图像中的定位图案:

    qr_sampling_grid_init(&grid,_version,_ul_pos,_ur_pos,_dl_pos,_qrdata->bbox,_img,_width,_height);
    

    然后将 QR 码除去功能区之外的区域转换为 0 和 1 的比特流:

    qr_sampling_grid_sample(&grid,data_bits,dim,_fmt_info,_img,_width,_height);
    

    使用 Reed-Solomon 纠错算法对提取出来的比特流进行校验和纠错,最后输出最终的识别比特流。 函数nqrdata = qr_code_data_list_extract_text(&qrlist, iscn, img);对求出的比特流进行分析判断,判断当前 QR 码属于什么编码模式,找到相应的编码模式后对比特流进行解码输出,最终求得QR 码的解码结果。

    展开全文
  • Zbar开源项目二维码识别(测试)

    万次阅读 2016-11-21 22:48:48
    我只查了Zxing、Zbar,其中Zxing在我的机器上编译调试通过,但效果并不理想,所以又换了Zbar使用一下。(我的小伙伴找到了Zxing移动端的开源库,并调试成功,我过几天再补上) 环境:VS2010、OpenCV2.4.9、...

    为了完成大飞哥老师布置的作业,调查了一下开源的二维码识别库。我只查了Zxing、Zbar,其中Zxing在我的机器上编译调试通过,但效果并不理想,所以又换了Zbar使用一下。(我的小伙伴找到了Zxing移动端的开源库,并调试成功,我过几天再补上)


    环境:VS2010、OpenCV2.4.9、Zbar环境配置

    环境说明:

    1.      OpenCV是一个机器视觉开源类库,广泛用于图像处理、模式识别等领域,它是Zbar项目的核心。这里我使用的是OpenCV2.4.9。(不建议使用OpenCV1版本)

    2.      集成开发工具Visual Studio2010。(不建议使用Visual C++ 6.0,因其仅支持OpenCV1.0的版本)

    3.      Zbar开发环境

     

    Zbar官网:http://zbar.sourceforge.net/download.html

    OpenCV官网:http://opencv.org/

    环境配置参考:http://blog.csdn.net/dcrmg/article/details/52108258


    使用说明:

    1.      安装OpenCV、Zbar,并进行环境配置

    2.      新建C++控制台应用程序,并设置相应的工程属性,添加包含目录、附加链接等。

    3.      测试程序如下:


    #include "zbar.h"    
    #include "cv.h"    
    #include "highgui.h"    
    #include <iostream>    
    
    using namespace std;    
    using namespace zbar;  
    using namespace cv;    
    
    int main(void)  
    {    
    	ImageScanner scanner;    
    	scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);   
    	char file[256];    
    	cin>>file;    
    	Mat img = imread(file,0);    
    	Mat imgout;    
    	cvtColor(img,imgout,CV_GRAY2RGB);    
    	int width = img.cols;    
    	int height = img.rows;    
    	uchar *raw = (uchar *)img.data;       
    	Image image(width, height, "Y800", raw, width * height);      
    	int n = scanner.scan(image);      
    	for(Image::SymbolIterator symbol = image.symbol_begin();symbol != image.symbol_end();symbol++)  
    	{    
    		vector<Point> vp;    
    		cout<<"Decoded:êo"<<endl<<symbol->get_type_name()<<endl<<endl;  
    		cout<<"Symbol:êo"<<endl<<symbol->get_data()<<endl<<endl;           
    		int n = symbol->get_location_size();    
    		for(int i=0;i<n;i++)  
    		{    
    			vp.push_back(Point(symbol->get_location_x(i),symbol->get_location_y(i)));   
    		}    
    		RotatedRect r = minAreaRect(vp);    
    		Point2f pts[4];    
    		r.points(pts);    
    		Point textPoint(pts[1]);  
    		string codeNum=symbol->get_data();  
    		for(int i=0;i<4;i++)  
    		{    
    			line(imgout,pts[i],pts[(i+1)%4],Scalar(255,0,0),3);   
    			textPoint.x>=pts[i].x?textPoint.x=pts[i].x:textPoint.x=textPoint.x;  
    			textPoint.y>=pts[i].y?textPoint.y=pts[i].y:textPoint.y=textPoint.y;  
    	 putText(imgout,codeNum,textPoint,FONT_HERSHEY_COMPLEX,1,Scalar(0,0,255),1,8,false);               
    		}    
    		cout<<"Angle: "<<r.angle<<endl;    
    	}    
    	imshow("imgout.jpg",imgout);      
    	waitKey();    
    }    
    

    4.     先生成一个嵌入文本信息的二维码



    运行测试程序,如下图:




    换个网址再试试:






    展开全文
  • ZBar的简单使用

    千次阅读 2019-04-07 08:59:00
    NSRunLoop类声明的编程接口用于管理输入源对象。一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源。一个NSRunLoop对象也处理的NSTimer事件。...
    NSRunLoop类声明的编程接口用于管理输入源对象。一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源。一个NSRunLoop对象也处理的NSTimer事件。


    你的应用程序不能建立或明白管理NSRunLoop对象。

    每一个NSThread对象。包含应用程序的主线程。具有依据须要自己主动创建一个NSRunLoop对象。假设你须要訪问当前线程的执行循环,能够使用类方法currentRunLoop。


    1.下载ZBar的第三方库。加入入project

    2.加入相关库
       AVFoundation.framework
       CoreMedia.framework
       CoreVideo.framework
       libiconv.2.4.0.dylib  

    3.添加一个以ZBarReaderViewController为父类的控制器并实现ZBarReaderDelegate代理

    4.在控制器中加入例如以下代码

    条形码的扫描
    - (void)viewDidLoad
    {
        [
    super viewDidLoad];
        
    //设置代理
        
    self.readerDelegate = self;
        
    //扫瞄图像
        
    ZBarImageScanner *mScanner = self.scanner;
        
    //是否显示绿色的追踪框。注意。即当选择yes的时候。这个框只当扫瞄EANI2/5的时候才可见。


        
    self.tracksSymbols = YES;
        
    //是否使用备用控制组
        
    self.showsZBarControls = YES;
        
    //支持的方向。用ZBarOrientationMask()  ZBarOrientationMaskAll
        
    self.supportedOrientationsMask = ZBarOrientationMask(UIInterfaceOrientationMaskPortrait);
        
        
    //提供自己定义覆盖层。注意,在showsZBarControls启用的情况下才干够用
        
    UIView *view = [[UIView allocinitWithFrame:self.view.bounds];
        view.
    backgroundColor = [UIColor grayColor];
        
    self.cameraOverlayView = view;
        
        
    //裁剪扫描的图像,在扫描前图像将被裁剪到这个矩形内。这个矩形框是将图像的尺寸和宽高比标准化,
        
    //有效值将放置矩形内介于01的每一个轴。当中x轴相应于图像的长轴。默觉得完整的图像(0011)。


    //    self.scanCrop
        
    //调节以适应预览图片
    //    self.cameraViewTransform
         //解码配置
        [mScanner 
    setSymbology:ZBAR_I25
                       
    config:ZBAR_CFG_ENABLE
                           
    to:0];
    // Do any additional setup after loading the view.
    }

    - (
    void)viewDidAppear:(BOOL)animated
    {
        [
    super viewDidAppear:animated];
        [
    self.readerView start];
    }

    - (
    void)viewWillDisappear:(BOOL)animated
    {
        [
    super viewWillDisappear:animated];
        [
    self.readerView stop];
    }

    - (
    void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        
    //获取扫瞄结果
        
    id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];
        
    ZBarSymbol *symbol = nil;
         //不过抓住第一个条形码
        
    for (symbol in results)
            
    break;
        
    NSString *text = symbol.data;
            
    //解决中文乱码问题
        
    if ([text canBeConvertedToEncoding:NSShiftJISStringEncoding]) {
            text = [
    NSString stringWithCString:[text cStringUsingEncoding:NSShiftJISStringEncodingencoding:NSUTF8StringEncoding];
        }
        
    NSDictionary *dic = [[NSDictionary allocinitWithObjectsAndKeys:[NSString stringWithFormat:@"%@",text],@"resultLabel",[info objectForKey:UIImagePickerControllerOriginalImage],@"resultImgView"nil];
        [
    self performSelectorOnMainThread:@selector(mainAction:) withObject:dic waitUntilDone:NO];
    }

    - (void)mainAction:(NSDictionary *)dic
    {
        
    OtherViewController *other = [[OtherViewController allocinit];
        other.
    resultString = [dic objectForKey:@"resultLabel"];
        other.
    image = [dic objectForKey:@"resultImgView"];
        [
    self.navigationController pushViewController:other animated:YES];
    }


    此时,我们再来看看ZBarReaderViewController中的ZBarReaderView这个类
    // supply a pre-configured image scanner.
    //支持一个预先准备的图片扫描
    - (
    id) initWithImageScanner: (ZBarImageScanner*) imageScanner;

    // start the video stream and barcode reader.
    //開始视频流和条形码扫描
    - (
    void) start;

    // stop the video stream and barcode reader.
    //停止视频流和条形码扫描
    - (
    void) stop;

    // clear the internal result cache
    //清理内部的缓存
    - (
    void) flushCache;

    // compensate for device/camera/interface orientation
    // 适应设备的方向
    - (
    void) willRotateToInterfaceOrientation: (UIInterfaceOrientation) orient
                                     duration: (NSTimeInterval) duration;

    // delegate is notified of decode results.
    //代理
    @property (nonatomicassignid<ZBarReaderViewDelegate> readerDelegate;

    // access to image scanner for configuration.
    //直接对图片扫描配置
    @property (nonatomicreadonlyZBarImageScanner *scanner;

    // whether to display the tracking annotation for uncertain barcodes
    // (default YES).
    // 是否为不确定的条形码显示追踪
    @property (nonatomicBOOL tracksSymbols;

    // color of the tracking box (default green)
    //追踪框的颜色,默觉得绿色
    @property (nonatomicretainUIColor *trackingColor;

    // enable pinch gesture recognition for zooming the preview/decode
    // (default YES).
    // 能否对预览图进行手势缩放,默认是能够的
    @property (nonatomicBOOL allowsPinchZoom;

    // torch mode to set automatically (default Auto).
    // 0为不闪光。1为闪光
    @property (nonatomicNSInteger torchMode;

    // zoom scale factor applied to video preview *and* scanCrop.
    // also updated by pinch-zoom gesture.  clipped to range [1,maxZoom],
    // defaults to 1.25
    // 施加于摄像前景画面和扫描区域的缩放
    @property (nonatomicCGFloat zoom;
    - (
    void) setZoom: (CGFloat) zoom
            animated: (BOOL) animated;

    // the region of the image that will be scanned.  normalized coordinates.
    // 图片将被扫描的区域,标准坐标
    @property (nonatomicCGRect scanCrop;

    二维码的扫描

    实现代理ZBarReaderViewDelegate

    - (void)readerView:(ZBarReaderView *)readerView didReadSymbols:(ZBarSymbolSet *)symbols fromImage:(UIImage *)image
    {
        
    ZBarSymbol *symbol = nil;
        
    for (symbol in symbols)
            
    break;
        
    NSString *text = symbol.data;
        
    NSLog(@"%@",text);
    }

    转载于:https://www.cnblogs.com/xfgnongmin/p/10664051.html

    展开全文
  • ZBAR

    2019-10-25 17:42:37
    1./** read back an image in the format written by zbar_image_write() * @note TBD */ extern zbar_image_t *zbar_image_read(char *filename); 2. /** set config for indicated symbology (0 for all) to...
    1./** read back an image in the format written by zbar_image_write()
     * @note TBD
     */
    extern zbar_image_t *zbar_image_read(char *filename);

    2.

    /** set config for indicated symbology (0 for all) to specified value.
     * @returns 0 for success, non-0 for failure (config does not apply to
     * specified symbology, or value out of range)
     * @see zbar_decoder_set_config()
     * @since 0.4
     */
    extern int zbar_image_scanner_set_config(zbar_image_scanner_t *scanner,
                                             zbar_symbol_type_t symbology,
                                             zbar_config_t config,
                                             int value);
    
    enum zbar_symbol_type_t 
    decoded symbol type. 
    
    Enumerator: 
    ZBAR_NONE 
    no symbol decoded 
    ZBAR_PARTIAL 
    intermediate status 
    ZBAR_EAN8 
    EAN-8. 
    ZBAR_UPCE 
    UPC-E. 
    ZBAR_ISBN10 
    ISBN-10 (from EAN-13). 
    
    Since:
    0.4 
    ZBAR_UPCA 
    UPC-A. 
    ZBAR_EAN13 
    EAN-13. 
    ZBAR_ISBN13 
    ISBN-13 (from EAN-13). 
    
    Since:
    0.4 
    ZBAR_I25 
    Interleaved 2 of 5. 
    
    Since:
    0.4 
    ZBAR_CODE39 
    Code 39. 
    
    Since:
    0.4 
    ZBAR_PDF417 
    PDF417. 
    
    Since:
    0.6 
    ZBAR_QRCODE 
    QR Code. 
    
    Since:
    0.10 
    ZBAR_CODE128 
    Code 128. 
    ZBAR_SYMBOL 
    mask for base symbol type 
    ZBAR_ADDON2 
    2-digit add-on flag 
    ZBAR_ADDON5 
    5-digit add-on flag 
    ZBAR_ADDON 
    add-on flag mask 

     

    展开全文
  • zbar64位安装使用

    千次阅读 2018-03-26 11:08:42
    ZBAR+VS2015环境配置教程 1. 1.将下载的zbar压缩文件夹解压 2. 2.解压完成后首先安装32位(点击setup即可) 3. 3.Vs的环境配置详见此网站http://blog.csdn.net/dcrmg/article/details/52108258,实际和配置...
  • zbar的使用

    2015-04-24 15:11:32
    关于二维码的制作,里面有相应的包,这都是第三方的封装包,直接下载便可以使用
  • 之前尝试使用Zxing来进行扫描,无奈Zxing速度太慢,而且对扫描的二维码或条形码的清晰度要求很高,故在网上找寻,发现高人所写的使用Zbar进行二维码扫描的结算,使用后发现Zbar的扫描效率和准确度比Zxing高出不止一点,...
  • Zbar算法流程介绍

    万次阅读 多人点赞 2017-01-16 15:07:07
    zbar算法是现在网上开源的条形码,二维码检测算法,算法可识别大部分种类的一维码(条形码),比如I25,CODE39,CODE128,不过大家更关心的应该是现在很火的QR码的解码效率,随着现在生活中QR码的普及,扫码支付等...
  • zbar算法流程

    2019-10-26 10:01:27
  • 2.zbar配置 3.代码实现 4.效果 5.总结 0.准备工作 0.1我的实验配置: win10+VS2015community+opencv2.4+zbar0.10 0.2资源下载: opencv 2.4下载地址:https://opencv.org/opencv-v2-4-2-released.html zbar...
  • 使用ZBar来读取条形码和二维码的方法

    万次阅读 热门讨论 2012-06-12 23:58:24
    1.使用ZBar项目。下载地址是: http://zbar.sourceforge.net/iphone/index.html 2.新建一个项目。 3.导入 ZBar的sdk。把ZBar SDK的目录拉入项目,然后选中copy选项 4.在项目文件的target中加入 以下...
  • 前言 最近又被需求了一波,改了个扫码闪光灯无效的问题,让我好一顿查资料,被迫从github上找了一版基于Zxing实现扫码功能的demo,从头到尾地屡了一遍扫码解码逻辑,所以想写一下学到的东西,主要是扫码实现的逻辑...
  • 扫黑色的二维码可以识别,扫蓝色的二维码识别连聚焦都不行. 有没有好的解决方法
  • 一、环境: 系统:Windows 10
  • 安装zbar库,做二维码识别 之前看了下载源码安装,好麻烦,这种方法比较快 sudo apt-get install libzbar-dev sudo apt install python-pip sudo apt install python-pip 欢迎使用Markdown编辑器 你好! 这是你第...
  •   最近工作项目需要用到zbar库。写下这篇安装文档是由于本人在安装zbar库时,遇到一些坑,尤其网上很多经验分享博客说zbar只能在Python2.6.X版本下安装。   经本人测试,这位网友分享的方法【1】,可在Ubuntu...
  • zbar64-0.10 文件

    2019-03-27 22:44:57
    64位zbar库,可用于自行编译64位Zbar(解决中文乱码需要重新编译),含sln文件,可使用VS2013等进行编译。
  • Zbar二维码解析编译

    千次阅读 2014-09-26 15:07:47
    默认的Zbar for windows 中的DLL在windows不能支持中文,需要修改源码,然后重新编译,没有VS的工程,编译过程相当纠结。 1. 首先先安装 MinGW ,安装过程不详述,比较简单。 2. 将zbar源码放入到 ...
  • zbar使用

    2020-02-24 18:33:08
    zbar一个开源的C语言实现的条形码和二维码识别,可以用在任何平台。 编译 下面给出gn的写法,其他的编译工具,例如ndk和cmake,拿去参考改改就好了。这里还包括了libiconv的编译。 # zbar project: ...
  • ZBar简单使用

    千次阅读 2015-09-10 11:13:30
    1.下载ZBar的第三方,添加入工程 http://zbar.sourceforge.net/iphone/index.html https://github.com/bmorton/ZBarSDK 2.添加相关  AVFoundation.framework  CoreMedia.framework  ...
  • Zbar函数示例代码

    千次阅读 2013-05-20 14:45:42
    Zbar是一个简单易用的条形码和二维码识别,在iphone4以上的机器上识别二维码或者条形码速度非常快,并且使用起来非常简单,这个测试代码是一年多以前写的,现在可能有更新的版本了,具体大家可以参考他们的官网。...
  • zbar_symbol_type_t zbar_scan_y (zbar_scanner_t *scn, int y) { /* FIXME calc and clip to max y range... */ /* retrieve short value history */ register int x...
  • 错误 LNK2019 无法解析的外部符号 zbar_symbol_get_type,该符号在函数 "protected: void __cdecl zbar::Symbol::init(struct zbar::zbar_symbol_s const *)" (?init@Symbol@zbar@@IEAAXPEBUzbar_symbol_s@2@@Z) 中...
  • zBar 需要导入的

    千次阅读 2016-02-24 09:33:37
    最近公司接了一个项目,是海尔公司的,里面有二维码扫描的功能,开源的二维码扫描的sdk 有很多,今天我这里使用的ZBarSDK,一个比较优秀的开源项目,使用起来也很简单。  ZBarSDK是一个开源的SDK,可从这里...
  • ZBar是一个开源软件套件,用于从各种来源读取条形码,例如视频流,图像文件和原始强度传感器。它支持许多流行的符号体系 (条形码的类型),包括EAN-13 / UPC-A,UPC-E,EAN-8,Code 128,Code 39,Interleaved 2 of...
  • GitHub的上没有configure,官网试了好多次才打开成功并下载下来
  • zbar 64位改进

    千次阅读 2018-01-24 14:44:26
    我本想在windows上进行开发,上网搜了一下,发现了zbar这个工具包,兴致勃勃地下载下来准备配置一下,发现只能32位的,这就很尴尬了。 由于我的Opencv是64位的,我也不想再去搞个32位的,所以就去上github上看看有...
  • ZBar库 超级傻瓜配置,一套完美完成,超良心制作 首先给大家放一个链接: Windows系统下ZBar库的配置(VS2015+OpenCV3.4.3+ZBar0.10) 我是看着上文配置成功的,不过我的环境是VS2017+opencv4.10,大家看自己需要进行...

空空如也

1 2 3 4 5 ... 20
收藏数 4,694
精华内容 1,877
关键字:

zbar