使用的是zbar 0.10版本,网上找下源码就行,下载下来放到工程components目录下,然后在zbar中增加一个CMakeLists.txt,内容如下
set(srcs
zbar/config.c
zbar/decoder.c
zbar/decoder/qr_finder.c
zbar/error.c
zbar/img_scanner.c
zbar/qrcode/bch15_5.c
zbar/qrcode/binarize.c
zbar/qrcode/isaac.c
zbar/qrcode/qrdec.c
zbar/qrcode/qrdectxt.c
zbar/qrcode/rs.c
zbar/qrcode/util.c
zbar/refcnt.c
zbar/scanner.c
zbar/symbol.c
zbar/image.c
)
set(include_dirs
.
include
zbar
)
set(priv_include_dirs
.
include
zbar
)
idf_component_register(
SRCS ${srcs}
INCLUDE_DIRS ${include_dirs}
REQUIRES driver
)
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-error=parentheses -Wno-error=duplicate-decl-specifier -Wno-error=logical-not-parentheses -Wno-error=format=)
测试代码,找个图片生成一个灰度数组进行测试
静态数组为240x240的灰度数据,数据太多,这里不全
uint8_t data_buf[] = {
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
...
#include <zbar.h>
void zbar_scan(unsigned char *image_data,int width,int height)
{
zbar_image_t *zbar_image = zbar_image_create();
zbar_image_set_format(zbar_image, *(int*)"Y800");
zbar_image_set_size(zbar_image, width, height);
uint8_t *qrcodedata = (uint8_t *)calloc(width*height, sizeof(uint8_t));
memcpy(qrcodedata,image_data,width*height);
//zbar_image_set_data(zbar_image, image_data, width * height, zbar_image_free_data);
zbar_image_set_data(zbar_image, qrcodedata, width * height, zbar_image_free_data);
// 创建图像扫描器
zbar_image_scanner_t *scanner = zbar_image_scanner_create();
// 配置扫描器(可选)
zbar_image_scanner_set_config(scanner, ZBAR_QRCODE, ZBAR_CFG_ENABLE, 1);
// 扫描图像
int n = zbar_scan_image(scanner, zbar_image);
if (n > 0) {
// 处理扫描结果
const zbar_symbol_set_t *symbols = zbar_image_scanner_get_results(scanner);
const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol(symbols);
for (; symbol; symbol = zbar_symbol_next(symbol)) {
// 打印二维码内容
const char *data = zbar_symbol_get_data(symbol);
if(data != NULL)
printf("二维码内容: %s\n", data);
}
} else {
printf("没有检测到二维码\n");
}
// 清理资源
zbar_image_destroy(zbar_image);
zbar_image_scanner_destroy(scanner);
}
在main.c中调用
zbar_scan(data_buf,240,240);
速度比quric快很多。
如果提示找不到zbar在main同级目录下的CMakeLists.txt idf_component_register中增加
PRIV_REQUIRES zbar-0.10
不同的环境错误可能不一样,只能一个个试.

8位二维码灰度数组内容1234567890
python图像转8位灰度数组脚本
======================================
作者:hclydao
http://blog.csdn.net/hclydao
版权没有,但是转载请保留此段声明
=======================================
509

被折叠的 条评论
为什么被折叠?



