【文字识别】Lua 二值化函数

mac2022-06-30  72

LUA二值化效率较低,该函数只适合小范围二值化。 学习算法和思路可转化成C语言提高效率。

function binarizeImage(t) local getColorRGB = getColorRGB --[[定义取色函数]] local rect = t.rect or {0,0,0,0} local diff = t.diff or {"0x000000-0x000000"} local color = {} --[[diff参数数值化]] local tab = {} --[[二值化存储]] for k,v in pairs(diff) do if color[k]==nil then local rgb_1 = tonumber(string.sub(v,1,8)) --[[参数颜色]] local rgb_2 = tonumber(string.sub(v,10,17)) --[[参数偏色]] color[k] = { lr = rgb_1/0x10000, --[[RGB]] lg = rgb_1%0x10000/0x100, lb = rgb_1%0x100, sr=rgb_2/0x10000, --[[RGB阈值]] sg = rgb_2%0x10000/0x100, sb=rgb_2%0x100, } end end keepScreen(true) --[[保持屏幕,只在一张图片获取颜色]] for y=rect[2],rect[4] do local y1 = y - rect[2] + 1 tab[y1] = {} for x=rect[1],rect[3] do local x1 = x - rect[1] + 1 for i = 1,#color do --[[diff多参数循环]] local lr,lg,lb = color[i].lr,color[i].lg,color[i].lb local sr,sg,sb = color[i].sr,color[i].sg,color[i].sb local r,g,b = getColorRGB(x,y) --[[获取颜色RGB,搭配保持屏幕函数提高效率]] if math.abs(lr-r) > sr or math.abs(lg-g) > sg or math.abs(lb-b) > sb then tab[y1][x1] = 0 --[[不匹配]] else tab[y1][x1] = 1 --[[匹配]] break end end end end keepScreen(false) --[[关闭保持屏幕]] return tab end --[[小范围]] local co = {rect = {597,305,672,333},diff = {"0xf3f3f4-0x555555"}} local t = binarizeImage(co) -->耗时69ms --[[全屏单色]] local co = {rect = {0, 0, 719, 1279},diff = {"0xf3f3f4-0x555555"}} local t = binarizeImage(co) -->耗时2623ms --[[全屏多色]] local co = {rect = {0, 0, 719, 1279},diff = {"0xf3f3f4-0x555555","0xf3f3f4-0x555555"}} local t = binarizeImage(co) -->耗时4982ms

最新回复(0)