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

简介: 一维二维码的提取、识别和产生   零、相关说明:     在“jsxyhelu.cnblogs.com/机器视觉”栏目主要介绍和图像处理和机器视觉相关的的成套的解决方案、思路和软件集。希望能够为大家在实际工作中解决具体问题提供一些帮助。
一维二维码的提取、识别和产生
 
零、相关说明:
    在“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的本身的问题;
      同时,对于一些可能比较复杂的情况,可能这里的比较简单的获取方法还有问题,还需要具体问题具体对待。
 
 
 



 



目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com
目录
相关文章
|
3月前
|
算法 开发工具 计算机视觉
条形码识别研究
条形码识别研究
|
4月前
|
存储 数据挖掘
[Halcon&识别] 二维码识别
[Halcon&识别] 二维码识别
76 0
|
10月前
|
安全 知识图谱
三维点云的开放世界理解,分类、检索、字幕和图像生成样样行
三维点云的开放世界理解,分类、检索、字幕和图像生成样样行
179 0
|
10月前
|
数据库
导出矢量条码二维码的方法
码在设计印刷行业,经常使用导入到Coreldraw或Illustrator等矢量环境排版使用。矢量条码最大的优点是无论你将它放大、缩小或旋转等它都有一样平滑的边缘, 一样的清晰度,不会失真。
79 1
|
10月前
|
机器学习/深度学习 传感器 算法
【图像隐藏】基于RS码结合小波变换实现数字水印嵌入与提取附Matlab代码
【图像隐藏】基于RS码结合小波变换实现数字水印嵌入与提取附Matlab代码
|
10月前
|
Perl
提取信息
提取信息
|
11月前
|
机器学习/深度学习 存储 文字识别
图像数字识别、数字分割(OCR识别,毕业设计)
图像数字识别、数字分割(OCR识别,毕业设计)
226 0
|
12月前
【IMAQ】imaqGetImageInfo() 获取图像信息
【IMAQ】imaqGetImageInfo() 获取图像信息
|
算法 小程序 Java
图像中二维码的检测和定位
图像中二维码的检测和定位
987 0
图像中二维码的检测和定位
|
机器学习/深度学习 资源调度 算法
图像提取特征(下)| 学习笔记
快速学习图像提取特征(下),介绍了图像提取特征(下)系统机制, 以及在实际应用过程中如何使用。
98 0
图像提取特征(下)| 学习笔记