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

 

posted @   耿明岩  阅读(692)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
希望能帮助到你,顺利解决问题! ...G(^_−)☆
点击右上角即可分享
微信分享提示