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

Lua 专栏收录该内容
4 篇文章 0 订阅

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

在这里插入图片描述

  • 2
    点赞
  • 3
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值