精华内容
下载资源
问答
  • Opencv+Zbar二维码识别(二维码校正

    千次阅读 2018-05-30 08:57:48
    转载:https://blog.csdn.net/dcrmg/article/details/52195999二维码和车牌识别基本...这里介绍一种二维码校正方法,通过定位二维码的4个顶点,利用仿射变换校正。基本思路:滤波->二值化->膨胀(腐蚀)...

    转载:https://blog.csdn.net/dcrmg/article/details/52195999

    二维码和车牌识别基本都会涉及到图像的校正,主要是形变和倾斜角度的校正,一种二维码的畸变如下图:


    这个码用微信扫了一下,识别不出来,但是用Zbar还是可以准确识别的~~。

    这里介绍一种二维码校正方法,通过定位二维码的4个顶点,利用仿射变换校正。基本思路:滤波->二值化->膨胀(腐蚀)操作->形态学边界->寻找直线->定位交点->仿射变换校正->Zbar识别。


    滤波、二值化:


    腐蚀操作:



    形态学边界:



    寻找直线:



    角点定位:



    仿射变换校正:



    Zbar识别:



    Code实现:

    [cpp]  view plain  copy
    1. #include "zbar.h"        
    2. #include "cv.h"        
    3. #include "highgui.h"        
    4. #include <iostream>        
    5.   
    6. using namespace std;        
    7. using namespace zbar;  //添加zbar名称空间      
    8. using namespace cv;        
    9.   
    10. int main(int argc,char*argv[])      
    11. {    
    12.     Mat imageSource=imread(argv[1],0);    
    13.     Mat image;  
    14.     imageSource.copyTo(image);  
    15.     GaussianBlur(image,image,Size(3,3),0);  //滤波  
    16.     threshold(image,image,100,255,CV_THRESH_BINARY);  //二值化  
    17.     imshow("二值化",image);      
    18.     Mat element=getStructuringElement(2,Size(7,7));  //膨胀腐蚀核  
    19.     //morphologyEx(image,image,MORPH_OPEN,element);   
    20.     for(int i=0;i<10;i++)  
    21.     {  
    22.         erode(image,image,element);  
    23.         i++;  
    24.     }     
    25.     imshow("腐蚀s",image);  
    26.     Mat image1;  
    27.     erode(image,image1,element);  
    28.     image1=image-image1;  
    29.     imshow("边界",image1);  
    30.     //寻找直线 边界定位也可以用findContours实现  
    31.     vector<Vec2f>lines;  
    32.     HoughLines(image1,lines,1,CV_PI/150,250,0,0);  
    33.     Mat DrawLine=Mat::zeros(image1.size(),CV_8UC1);  
    34.     for(int i=0;i<lines.size();i++)  
    35.     {  
    36.         float rho=lines[i][0];  
    37.         float theta=lines[i][1];  
    38.         Point pt1,pt2;  
    39.         double a=cos(theta),b=sin(theta);  
    40.         double x0=a*rho,y0=b*rho;  
    41.         pt1.x=cvRound(x0+1000*(-b));  
    42.         pt1.y=cvRound(y0+1000*a);  
    43.         pt2.x=cvRound(x0-1000*(-b));  
    44.         pt2.y=cvRound(y0-1000*a);  
    45.         line(DrawLine,pt1,pt2,Scalar(255),1,CV_AA);  
    46.     }  
    47.     imshow("直线",DrawLine);  
    48.     Point2f P1[4];  
    49.     Point2f P2[4];  
    50.     vector<Point2f>corners;  
    51.     goodFeaturesToTrack(DrawLine,corners,4,0.1,10,Mat()); //角点检测  
    52.     for(int i=0;i<corners.size();i++)  
    53.     {  
    54.         circle(DrawLine,corners[i],3,Scalar(255),3);  
    55.         P1[i]=corners[i];         
    56.     }  
    57.     imshow("交点",DrawLine);  
    58.     int width=P1[1].x-P1[0].x;  
    59.     int hight=P1[2].y-P1[0].y;  
    60.     P2[0]=P1[0];  
    61.     P2[1]=Point2f(P2[0].x+width,P2[0].y);  
    62.     P2[2]=Point2f(P2[0].x,P2[1].y+hight);  
    63.     P2[3]=Point2f(P2[1].x,P2[2].y);  
    64.     Mat elementTransf;  
    65.     elementTransf=  getAffineTransform(P1,P2);  
    66.     warpAffine(imageSource,imageSource,elementTransf,imageSource.size(),1,0,Scalar(255));  
    67.     imshow("校正",imageSource);     
    68.     //Zbar二维码识别  
    69.     ImageScanner scanner;        
    70.     scanner.set_config(ZBAR_NONE, ZBAR_CFG_ENABLE, 1);   
    71.     int width1 = imageSource.cols;        
    72.     int height1 = imageSource.rows;        
    73.     uchar *raw = (uchar *)imageSource.data;           
    74.     Image imageZbar(width1, height1, "Y800", raw, width * height1);          
    75.     scanner.scan(imageZbar); //扫描条码      
    76.     Image::SymbolIterator symbol = imageZbar.symbol_begin();    
    77.     if(imageZbar.symbol_begin()==imageZbar.symbol_end())    
    78.     {    
    79.         cout<<"查询条码失败,请检查图片!"<<endl;    
    80.     }    
    81.     for(;symbol != imageZbar.symbol_end();++symbol)      
    82.     {        
    83.         cout<<"类型:"<<endl<<symbol->get_type_name()<<endl<<endl;      
    84.         cout<<"条码:"<<endl<<symbol->get_data()<<endl<<endl;         
    85.     }        
    86.     namedWindow("Source Window",0);  
    87.     imshow("Source Window",imageSource);          
    88.     waitKey();      
    89.     imageZbar.set_data(NULL,0);    
    90.     return 0;    
    91. }  

    展开全文
  • 该例子包含halcon测试代码和图片,可以矫正不规则二维码后进行识别
  • 本代码,基于opencv寻找二维码的四个顶点,并通过仿射变换对二维码进行畸变矫正。不须标定,简单易用。
  • Halcon二维码纠正

    2020-12-18 21:16:56
    dev_update_off () dev_close_window () read_image (Image_slanted, 'datacode/ecc200/ecc200_to_preprocess_001') dev_open_window_fit_image (Image_slanted, 0, 0, -1, -1, WindowHandle) ...
    dev_update_off ()
    dev_close_window ()
    
    read_image (Image_slanted, 'datacode/ecc200/ecc200_to_preprocess_001')
    dev_open_window_fit_image (Image_slanted, 0, 0, -1, -1, WindowHandle)
    set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
    dev_set_color ('green')
    dev_set_line_width (3)
    Message := 'This program demonstrates how to preprocess'
    Message[1] := 'a slanted 2d data code with rectification'
    Message[2] := 'before reading the data code symbol.'
    disp_message (WindowHandle, Message, 'window', 12, 12, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
    
    
    *初始化
    XCoordCorners := [130,225,290,63]
    YCoordCorners := [101,96,289,269]
    
    *gen_cross_contour_xld  为每个输入点生成一个十字形的XLD轮廓线。
    gen_cross_contour_xld (Cross, YCoordCorners, YCoordCorners, 6, 0.785398)
    dev_display (Image_slanted)
    dev_display (Cross)
    disp_message (WindowHandle, 'Slanted image', 'window', 12, 12, 'black', 'true')
    Message := 'The marked corners are used to generate a'
    Message[1] := 'homogeneous transformation matrix which'
    Message[2] := 'defines the projective transformation for'
    Message[3] := 'the rectification of the symbol.'
    disp_message (WindowHandle, Message, 'window', 380, 12, 'black', 'true')
    disp_continue_message (WindowHandle, 'black', 'true')
    stop ()
    
    *利用给定点对应关系计算齐次变换矩阵
    hom_vector_to_proj_hom_mat2d (XCoordCorners, YCoordCorners, [1,1,1,1], [70,270,270,70], [100,100,300,300], [1,1,1,1], 'normalized_dlt', HomMat2D)
    
    *对图像应用射影变换
    projective_trans_image (Image_slanted, Image_rectified, HomMat2D, 'bilinear', 'false', 'false')
    
    *创建一个2D数据代码类的模型
    create_data_code_2d_model ('Data Matrix ECC 200', [], [], DataCodeHandle)
    *检测和读取图像中的二维数据码符号或训练二维数据码模型
    find_data_code_2d (Image_rectified, SymbolXLDs, DataCodeHandle, [], [], ResultHandles, DecodedDataStrings)
    
    dev_display (Image_slanted)
    dev_display (Image_rectified)
    dev_display (SymbolXLDs)
    disp_message (WindowHandle, 'Decoding successful ', 'window', 12, 12, 'black', 'true')
    set_display_font (WindowHandle, 12, 'mono', 'true', 'false')
    disp_message (WindowHandle, DecodedDataStrings, 'window', 350, 70, 'forest green', 'true')
    
    展开全文
  • PDF417码的二维码校正以及译码

    千次阅读 2017-02-20 21:27:33
    不想写啥了,直接贴githud链接吧 https://github.com/LLuqw/pdf417

    上学期写的,现在直接贴个源码吧,上面有一些测试图片跟代码的实现效果,用到的知识还是挺多的

    https://github.com/LLuqw/pdf417

    展开全文
  • 根据信息生成二维码

    2014-09-24 17:03:05
    根据信息生成二维码,web接口,还可以解析二维码,取代google二维码api
  • python 二维码识别与重构

    千次阅读 2020-09-16 09:40:30
    关于二维码主要有三个python模块:zbar 、zbarlight、zxing。其识别效果与速度。其他人说的很明白,我这里不再阐述。【请点击】 zxing开源地址:https://github.com/zxing/zxing/ 安装依赖: pip install -i ...


    二维码重构效果:(重构不一定很准,考虑到二维码的自我校正功能,识别率能有所提升)
    在这里插入图片描述

    一、二维码识别

    关于二维码主要有三个python模块:zbar 、zbarlight、zxing。其识别效果与速度。其他人说的很明白,我这里不再阐述。【请点击】

    zxing开源地址:https://github.com/zxing/zxing/

    安装依赖:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python
    pip install -i https://pypi.tu

    展开全文
  • 基于OpenCV实现二维码等图像的检测与矫正

    千次阅读 多人点赞 2019-12-24 15:18:18
    1. 效果展示 首先先展示一下效果,左边是原图,右边是通过矫正后的图片。...通过对比度亮度调整,增加二维码和背景的分离度。 2)滤波降噪 通过滤波降噪,去除部分图像噪点。 3)反二值化 反二值化...
  • java对二维码个性修改

    千次阅读 2018-11-14 17:25:08
    ​ 最近有一个业务需求,生成微信小程序二维码,中间的logo变成用户上传的logo,下方添加上一行文字 ​ 网上有一些图片覆盖或者添加文字的代码,但是没有两种情况都进行的代码,对找到的代码进行了一些拼凑踩了...
  • Opencv+Zbar二维码识别(一维码校正

    万次阅读 热门讨论 2016-08-13 11:39:05
    对倾斜的(没有严重形变)一维码的角度校正,可以根据其黑白相间、排列规则的特点,计算傅里叶频谱,通过傅里叶频谱中直线的倾斜角度计算空间域图像一维码需校正的角度。 校正步骤: 1. 计算图像X,Y方向上梯度图像...
  • Data Matrix二维码编码原理及其识别技术

    万次阅读 多人点赞 2020-03-26 23:29:47
    Data Matrix二维码由美国国际资料公司(International Data Matrix)于1989年发明,是一种由黑色、白色的色块以正方形或长方形组成的二维码,其发展构想是希望在较小的标签上存储更多的信息量。DM码适合于小零件的的...
  • * 计算层数,二维码角框有五层轮廓(有说六层),这里不计自己这一层,有4个以上子轮廓则标记这一点 */ double [] ds = hierarchy.get(0 , i); if (ds != null && ds.length>3 ){ int count =0 ; if...
  • 你知道二维码的图案原理吗?

    千次阅读 2018-05-02 22:57:28
    常见的二维码上为啥三个角上有方块?二维码为什么是黑白相间的?为什么扫二维码的一部分也能看到信息?请看南京邮电大学计算机学院副教授黄海平做详细分析。 随着苹果手机的研发及安卓系统的市场铺张式的发展,使得...
  • 图像中二维码的检测和定位

    千次阅读 2017-08-20 00:00:00
    二维码 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1...
  • 扫描图像二维码抠图(倾斜校正 去黑边)时间:2016-05-06 16:23:15 阅读:1459 评论:0 收藏:0 [点我收藏+]标签:des 算法 class style log com http it si 由于要识别扫描仪得到的图片,直接将得到的...
  • 还是这个接手项目,二维码扫描集成的是zxing,扫描界面的图像有明显的拉伸变形。 这种问题,根据以往的经验,一般是x,y轴错位引起的,处理好x,y轴的问题,一般可以解决问题。 由于这个问题,之前有很多人遇到,并...
  • 二维码之java实现

    2016-06-27 17:16:21
    二维码的简介 二维码 (2-dimensional bar code),是用某种特定的几何图形按一定规律在平面(二维方向上) 分布的黑白相间的图形记录数据符号信息的。 在许多种类的二维条码中,常用的码制有:Data Matrix, Maxi ...
  • 介绍印制于曲面上的二维码的识别方式和算法,有助于不规则表面的二维码识别。
  • img{ padding:200px 0 0 200px !important;margin:-200px 0 0 -200px !important;position: relative;z-index: 100;-webkit-user-select: none; } 转载于:https://www.cnblogs.com/cench/p/5776698.html
  • 二维码识别算法

    热门讨论 2014-06-24 20:29:34
    针对解码识别过程,详细分析了基于图像处理的预处理方法,包括二维码灰度化处理、图像平滑和二值化过程,同时针对二维码实际情况,设计了基于Canny和Hough变换的二维码旋转校正算法,几何形变校正算法,并通过QR...
  • matlab练习程序(倾斜校正,透视变换)  过去也写过透视变换,当时算法真是弱爆了,我竟然会通过两次变换。不过那引用的三篇文章都是非常好的文章,直到今天我才看明白。所谓的倾斜校正,一定要有标定点,将一...
  • matlab 倾斜校正算法

    2017-11-06 00:05:35
    matlab 倾斜校正算法的实例,内附源程序及图像以供试验
  • Data Matrix二维码图像处理与应用

    千次阅读 2013-03-31 16:47:58
    Data Matrix二维码图像处理与应用 摘要:以Meteor II Standard图像采集卡为基础,以识别金属零件上的Data Matrix二维码为目的, 对摄像头采集的图像进行处理。实现了该方法在工业流水线睥实时识别应用。 ...
  • QR二维码识别中在预处理后最重要的一步就是要进行定位,QR二维码中有三个位置探测图形,通过扫描其特征便可以进行精细定位。 其中位置探测图形的比例特征如下: 使用的方法为,横竖扫描图像像素,找到满足黑白...

空空如也

空空如也

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

二维码校正