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)的顺序:

  • 相关阅读:
    std::erase总结
    C++控制台应用程序运行控制台闪退
    判断当前进程是否已经打开C++
    获取当前系统语言C++
    VS中设置Qt多语言界面
    QString的功能
    安装mysql5.6
    centos6.9 PHP的编译安装并连接nginx
    centos6删除nginx
    centos6删除mysql安装
  • 原文地址:https://www.cnblogs.com/GengMingYan/p/15674018.html
Copyright © 2011-2022 走看看