影象掃瞄的工作都是由zbar_scan_image完成的,zbar_scan_image主要根據設定的掃瞄密度(density)控制畫素點讀取(z字形),scanner.c檔案內的zbar_scan_y()來完成濾波,閾值,確定邊緣,轉化成寬度流。
int zbar_scan_image (zbar_image_scanner_t *iscn,
zbar_image_t *img)
else
zbar_symbol_set_ref(syms, 2);
img->syms = syms;
unsigned w = img->width;
unsigned h = img->height;
const uint8_t *data = img->data;
zbar_image_write_png(img, "debug.png");
svg_open("debug.svg", 0, 0, w, h);
svg_image("debug.png", w, h);
zbar_scanner_t *scn = iscn->scn;
int density = cfg(iscn, zbar_cfg_y_density);
if(density > 0)
assert_pos;
quiet_border(iscn);
svg_path_end();
movedelta(-1, density);
iscn->v = y;
if(y >= h)
break;
zprintf(128, "img_x-: %04d,%04d @%p\n", x, y, p);
svg_path_start("vedge", -1. / 32, w, y + 0.5);
iscn->dx = iscn->du = -1;
iscn->umin = w;
while(x >= 0)
assert_pos;
quiet_border(iscn);
svg_path_end();
movedelta(1, density);
iscn->v = y;
}svg_group_end();
}iscn->dx = 0;
density = cfg(iscn, zbar_cfg_x_density);
if(density > 0)
assert_pos;
quiet_border(iscn);
svg_path_end();
movedelta(density, -1);
iscn->v = x;
if(x >= w)
break;
zprintf(128, "img_y-: %04d,%04d @%p\n", x, y, p);
svg_path_start("vedge", -1. / 32, h, x + 0.5);
iscn->dy = iscn->du = -1;
iscn->umin = h;
while(y >= 0)
assert_pos;
quiet_border(iscn);
svg_path_end();
movedelta(density, 1);
iscn->v = x;
}svg_group_end();
}iscn->dy = 0;
iscn->img = null;
#ifdef enable_qrcode
_zbar_qr_decode(iscn->qr, iscn, img);
#endif
/* fixme tmp hack to filter bad ean results */
if(syms->nsyms && !iscn->enable_cache &&
(density == 1 || cfg(iscn, zbar_cfg_y_density) == 1))
else
symp = &sym->next;}}
if(syms->nsyms && iscn->handler)
iscn->handler(img, iscn->userdata);
svg_close();
return(syms->nsyms);
}
ZBar在Windows上的使用
1.1 預設安裝 注意勾選上development headers and libraries 安裝完成後可在zbar安裝路徑下找到examples資料夾,用vs2008及以上編譯器可以開啟工程檔案 由於許可權問題,部分機器可能要將examples資料夾拷貝至其他目錄下執行 在工程屬性中可以看見例程...
zbar和zxing之間的對比
zbar移植的是c原始碼,zxing移植的是c 兩者對比 1.zxing支援更多的碼制 datamatix pdf417 等,zbar不能很好支援pdf417 但是在原始碼中有對於pdf417碼處理 3.zbar和zxing 兩者都不能 很好的支援 條碼掃瞄,在攝像頭解析度低,目標條碼列印在曲面上或...
Python中的descriptor中的一點疑問
在我的印象中,類中的函式是可以有兩種呼叫方式的,如下 class b def func self return 10 b b b.func b.func b 於是,在之前研究descriptor的時候,我就有了幾點困惑 我將 更換成了如下兩個版本 版本1 import time class lazy...