zoukankan      html  css  js  c++  java
  • ZBar 获取扫描到的二维码在图中位置

    接到一个需求,给图片中二维码打马赛克,立即联想到ZBar,用ZBar扫描后, 获取二维码在图中的位置,直接打码:

    int main(void) {
        Mat mat = imread("E:\\qrcodetest.jpg");
        zbar::ImageScanner scnner;
        scnner.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1);
        cvtColor(mat, mat, COLOR_BGR2GRAY);
        zbar::Image imageZbar(mat.cols, mat.rows, "Y800", (uchar *)mat.data, mat.cols * mat.rows);
        scnner.scan(imageZbar);
        SymbolIterator symbol = imageZbar.symbol_begin();
        if (imageZbar.symbol_begin() != imageZbar.symbol_end()) {
            //图中有二维码
            SymbolIterator iter = imageZbar.symbol_begin();
            //iter->get_location_size(): 二维码矩形有几个点,一般都是4个,也就是二维码一般都是方形的
            cout << iter->get_location_size() << endl;
            for (int i = 0; i < iter->get_location_size();i ++) {
                //获取第i个点的x
                cout << iter->get_location_x(i) << endl;
                //获取第i个点的y
                cout << iter->get_location_y(i) << endl;
            }
        }
    
        getc(stdin);
        return 0;
    }

    需要注意的是,二维码矩形点(x,y)的顺序:

  • 相关阅读:
    掌握MySQL 2
    掌握MySQL 1
    掌握并发编程3
    网络编程—SOCKET开发
    掌握并发编程2
    掌握并发编程1
    网络编程知识点
    osi五层协议
    C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
    C#中Convert和parse的区别
  • 原文地址:https://www.cnblogs.com/GengMingYan/p/15674018.html
Copyright © 2011-2022 走看看