首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >统计镜像中非连续块的数量

统计镜像中非连续块的数量
EN

Stack Overflow用户
提问于 2020-02-27 17:22:49
回答 1查看 94关注 0票数 0

我正在运行一个关于在线数字刺绣的项目。对于成本计算部分,我需要知道图像中有多少个不连续的块。当图像爆炸时,图像中有12个区块。

原图:

这是我所期望的结果。

很抱歉,我不能为这个问题提供任何在线编码示例。我完全不知道如何实现这个特性。无论是前端还是后端技术,任何建议都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2020-02-27 23:22:26

这些问题很难解决。即使是人类也会犯错。

例如,你提供的例子有13块,而不是我看到的12块。你错过了两腿之间的区块,刚好在11点以上。

如果我错了,我会争辩说,为什么要计算杯子的黑色,它也可能是猫的背部。

泛洪填方。

泛洪填充算法可以解决这个问题。This answer有一个用JavaScript编写的简单的泛洪填充算法,并使用Canvas 2DAPI。要使用图像,不得污染画布(同源或适当的CORS标头)

注意如果图像是抗锯齿的或编码为jpeg (或其他有损压缩),则还需要设置填充阈值

备注此功能仅适用于具有少量纯色的图像。包含渐变的图像,或被算作一个但具有多种颜色的形状(由于阴影、照明、高光、反射等)。无法使用此方法计数。

要计算块数

不是用颜色填充,而是用alpha =0(透明)填充。

步骤

代码语言:javascript
运行
复制
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像素。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60429915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档