[blog 机器视觉]一维二维码的提取、识别和产生

一维二维码的提取、识别和产生

零、相关说明:

在“jsxyhelu.cnblogs.com/机器视觉”栏目主要介绍和图像处理和机器视觉相关的的成套的解决方案、思路和软件集。希望能够为大家在实际工作中解决具体问题提供一些帮助。

一、背景资料:

现在一维码、二维码广泛使用于工业各方面。很多和图像处理相关的需求也有所涉及。这里也看过一些论文,里面有一些方法还是art-of-air的,也有一些具备一定参考价值。这里只是谈一谈一般情况下的提取和识别。对于特殊情况,肯定要特殊对待,其实本身是一个增强的处理。在条码的处理和产生部分,主要借助了zxing

那么,问题可以分为三个

1.1如何从图片中获取条码区域并且提取条码(由于缺乏二维码图片所有这里只分析一维码,以后有了二维码实际拍摄的图片再补上);

1.2如何识别条码;

1.3如何参数条码

二、主要内容:

2.1如何从图片中获取条码区域并且提取条码

条码(也就是一维码)在设计的时候就被设计成纵向冗余的。提取就可以借助这一特性。

比如这样的图像,经过canny->dilate->erode就可以得到这样的结果

Mat cannyClone= Mat::zeros(Size(gray.cols,gray.rows),gray.type());
    Canny(gray,canny,100,255);
    Mat element = getStructuringElement(MORPH_ELLIPSE,Size(7,3));
    morphologyEx(canny,canny,CV_MOP_DILATE,element);
    morphologyEx(canny,canny,CV_MOP_ERODE ,element);
    imwrite("canny.jpg",canny);

特征已经比较明显了,紧接着选取所有轮廓中最大的,并且将这个最大轮廓的外界长方形整个的扣出来,一般情况下就能够得到正确的结果:

findContours(canny,contours,CV_RETR_TREE,CV_CHAIN_APPROX_NONE);
    for (int i=0;i<contours.size();i++)
    {
        int itmp =  contourArea(contours[i]);
        if (imaxcontour < itmp )
        {
            imax = i;
            imaxcontour = itmp;
        }
    }
    //找到轮廓的处理
    Rect boundRect;//最小外接矩形
    drawContours(cannyClone,contours,imax,Scalar(255),-1);
    boundRect = boundingRect(Mat(contours[imax]));
    Mat srcRoi = src(boundRect);
    imwrite("barcode.jpg",srcRoi);

2.2如何识别条码;

借助zxing的相关方法,这里的解法是一维/二维通用的

string opFilePath = System.Environment.CurrentDirectory + "\\result.jpg";
            MultiFormatReader mutiReader = new com.google.zxing.MultiFormatReader();
            Bitmap img = (Bitmap)Bitmap.FromFile(opFilePath);
            if (img == null)
                return;
            LuminanceSource ls = new RGBLuminanceSource(img, img.Width, img.Height);
            BinaryBitmap bb = new BinaryBitmap(new com.google.zxing.common.HybridBinarizer(ls));
            Result r = mutiReader.decode(bb);
            tb.Text = r.Text;



2.2如何产生条码;

同样是借助zxing的相关方法,这个具体看代码和相关资料。

三、遗留问题:

由于zxing没有从源代码上吸收,所以无法保证算法的强壮性和可移植性,许多时候最终平台的选择还要考虑到zxing的本身的问题;

同时,对于一些可能比较复杂的情况,可能这里的比较简单的获取方法还有问题,还需要具体问题具体对待。

来自为知笔记(Wiz)

时间: 2024-12-17 07:18:07

[blog 机器视觉]一维二维码的提取、识别和产生的相关文章

OpenCV和Zbar两个Python模块实现二维码和条形码识别

在我们的日常生活中,处处可见条形码和二维码. 在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码:你去你们学校的自助机上借书还书时识别的也是条形码:哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码:甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的.条形码在我们的日常生活中真的是随处可见. 到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码

【转】Android 二维码 生成和识别(附Demo源码)--不错

原文网址:http://www.cnblogs.com/mythou/p/3280023.html 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可以自己查看源码. 1.ZXing库介绍 这里简单介绍一下ZXing库.ZXin

玩转Android之二维码生成与识别

二维码,我们也称作QRCode,QR表示quick response即快速响应,在很多App中我们都能见到二维码的身影,最常见的莫过于微信了.那么今天我们就来看看怎么样在我们自己的App中集成二维码的扫描与生成功能.OK,废话不多说,我们就开始做吧. 二维码的使用我主要想分为两部分来给大家介绍,一部分就是二维码的生成,这里的知识点都很简单,还有一部分是二维码的识别,这里稍微麻烦一些,不过细心来做其实也很简单.二维码的开发使用我们大多都是使用Google提供的zxing这个类库,使用这个类库我们需

一个不同于ZBAR的二维码扫描与识别。

现在好多人使用二维码用到第三方 ZBar,往往被不支持模拟器所困扰.经过楼主的不懈努力,终于一款原生二维码扫描识别与生成工具类完成了.大家可以轻易的添加二维码的头像,改变二维码的样式(颜色修改要慎重,有时候颜色修改的不合适会导致,二维码识别失败).废话不多说直接给demo地址:https://github.com/zcs110/scanQR.git   Code4上直接搜索scanQR就可以了.

Android 二维码 生成和识别(附Demo源码)

Edited by mythou 原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3280023.html 已测试  --  绝对靠谱 今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS.Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技术,所以做了初步了解.今天主要是讲解如何使用ZXing库,生成和识别二维码.这篇文章实用性为主,理论性不会讲解太多,有兴趣可

Android之zxing二维码生成与识别

二维码: 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的: 在代码编制上巧妙的利用构成计算机内部逻辑基础的0和1比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图像输入设备或光电扫描设备自动识读以实现信息自动处理: 二维码能够在横向和纵向两个方位同时表达信息,因此能在很小的面积内表达大量的信息: 二维码相对于条形码的优势就是省空间:   zxing简介: zxing是一个开放源码的,用java实现的多种格式的1D/2D条码图像处

python qrcode二维码生成与识别

二维码 二维码生成 1.用法 https://github.com/lincolnloop/python-qrcode 2.使用 简单实用 import qrcode # 二维码内容 data = "https://www.baidu.com" # 生成二维码 img = qrcode.make(data=data) # 直接显示二维码 img.show() # 保存二维码为文件 # img.save("baidu.jpg") 设置参数 import qrcode

安装二维码、条形码识别工具zbar

参考:http://blog.csdn.net/gaofuqi/article/details/26698547 http://www.imagemagick.org/download/ImageMagick-6.9.9-5.tar.gz 安装zbar http://blog.csdn.net/shanzhizi/article/details/50755168 安装zbar前需要安装imagemagic 安装好imagemagic后,需要执行下 ldconfig /usr/local/lib

安卓手机微信不能打开App下载地址的问题 apk文件二维码微信无法识别

现在微信分享的功能很多,从分享的链接下载apk安卓包是很正常的,但是微信不让下载apk包,只能通过浏览器来下载,但是这要给用户一个提示吧,不然用户不知道 下面我们来实现,引导用户通过浏览器来下载apk包 看下效果,图片在最下面 在需要下载的页面中加入下面的代码 <div class="weixin-tip" style="display:none;">   <p>   <img src="/images/weixin-tip.