get("#348") -- rgb functions
get("#479") -- getcrop2
get("#337") -- map(list, f)
get("#388") -- rectangle functions
brightnessThreshold = 0.9
function horizontalsplit(img)
local function isEmpty(x)
for y=0, img.height-1 do
if bright(rgb(img.getInt(x, y))) <= brightnessThreshold then
return false
end
end
return true
end
local lastEmpty, start = true, nil
local segments = {}
for x=0, img.width-1 do
empty = isEmpty(x)
if empty and not lastEmpty then
table.insert(segments, {start, x})
elseif not empty and lastEmpty then
start = x
end
lastEmpty = empty
end
if not lastEmpty then
table.insert(segments, {start, img.width})
end
if #segments <= 1 then -- don't bother with only 1 segment
return {}
end
local result = {}
for _, seg in ipairs(segments) do
local sx1, sx2 = unpack(seg)
local cropped = {
width = sx2-sx1,
height = img.height,
getInt = function(x, y)
return img.getInt(x+sx1, y)
end
}
local x1, y1, x2, y2 = getcrop2(cropped)
table.insert(result, newRectangle(x1+sx1, y1, x2-x1, y2-y1))
end
return result
end
Began life as a copy of #478
test run test run with input download show line numbers
Travelled to 12 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment