我正在运行一个关于在线数字刺绣的项目。对于成本计算部分,我需要知道图像中有多少个不连续的块。当图像爆炸时,图像中有12个区块。
原图:
这是我所期望的结果。
很抱歉,我不能为这个问题提供任何在线编码示例。我完全不知道如何实现这个特性。无论是前端还是后端技术,任何建议都将不胜感激。
发布于 2020-02-27 23:22:26
这些问题很难解决。即使是人类也会犯错。
例如,你提供的例子有13块,而不是我看到的12块。你错过了两腿之间的区块,刚好在11点以上。
如果我错了,我会争辩说,为什么要计算杯子的黑色,它也可能是猫的背部。
泛洪填方。
泛洪填充算法可以解决这个问题。This answer有一个用JavaScript编写的简单的泛洪填充算法,并使用Canvas 2DAPI。要使用图像,不得污染画布(同源或适当的CORS标头)
注意如果图像是抗锯齿的或编码为jpeg (或其他有损压缩),则还需要设置填充阈值
备注此功能仅适用于具有少量纯色的图像。包含渐变的图像,或被算作一个但具有多种颜色的形状(由于阴影、照明、高光、反射等)。无法使用此方法计数。
要计算块数
不是用颜色填充,而是用alpha =0(透明)填充。
步骤
Let block count represent number of blocks. Set to 0
Start at the top left most pixel.
Repeat following steps until you have reached bottom right most pixel
Start search
If the pixel is not transparent
Apply the flood fill at that pixel
Add 1 to block count
Repeat from start search
If the pixel is transparent
move right one pixel, if past right edge move down one and start at left
Repeat from start search
一旦你完成了这些步骤,你就有了图像中独立项目的数量。
泛洪填充算法还可以很容易地给出一个块的面积,(计算填充的像素数),给你每个块的大小(宽度,高度)和位置(上,左,右下)。
唯一的问题是图像噪声(由于抗锯齿和压缩伪影)。这会让你沿着颜色的边缘有许多小的不相连的块。使用填充中的像素数可忽略小于100像素左右的填充。在您提供的图像中,最小的块面积约为400像素。
https://stackoverflow.com/questions/60429915
复制相似问题