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)的顺序:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!