标签: flood-fill

填写OpenCV中的漏洞

我在OpenCV(canny边缘检测)中从边缘检测模块中提取了边缘图.我想要做的是填补边缘图中的孔.

我正在使用C++OpenCV库.在OpenCV中有一个cvFloodFill()函数,它将用种子(其中一个位置开始泛滥)填充漏洞.但是,我试图在不知道种子的情况下填充所有内部空洞.(类似于MATLAB中的imfill())

Q1:如何查找所有种子,以便我可以应用'cvFloodFill()'?
Q2:如何实现'imfill()'等效?

OpenCV中的新手,任何提示都很受欢迎.

c++ matlab opencv image-processing flood-fill

33
推荐指数
4
解决办法
6万
查看次数

如何最佳地解决洪水填充难题?

我喜欢玩益智游戏Flood-It,它可以在线播放:

https://www.lemoda.net/javascript/flood-it/game.html

它也可以作为iGoogle小工具使用.目的是用最少数量的连续填充填充整个委员会.

我正在尝试编写一个可以最佳地解决这个难题的程序.解决这个问题的最佳方法是什么?理想情况下我想使用A*算法,但我不知道估算剩余步数的功能应该是什么.我写了一个程序,进行了深度4强力搜索,以最大化填充区域.它工作得相当好,并且在解决这个难题时打败了我,但我对这个算法并不完全满意.

有什么建议?提前致谢.

algorithm search artificial-intelligence a-star flood-fill

31
推荐指数
2
解决办法
2万
查看次数

带掩模的OpenCV floodfill

文档为OpenCV的的floodfill功能状态:

该函数使用并更新掩码,因此您负责初始化掩码内容.洪水填充不能跨越掩码中的非零像素.例如,边缘检测器输出可以用作掩模以停止在边缘处填充.可以在对函数的多次调用中使用相同的掩码,以确保填充区域不重叠.

该功能如何更新掩码?它是否将填充中的所有像素设置为某个非零值?

opencv flood-fill

19
推荐指数
2
解决办法
4万
查看次数

用C编写的工作非递归填充算法?

我一直在努力找到一个有效的填充算法.在许多算法中,我只尝试过"递归线填充",其中一个行为完全符合它应该的主要警告,它偶尔会打击堆栈.:(

我已经尝试了很多我发现的非递归实现,并且它们都非常温和:要么在奇怪的地方留下空隙,要么泛滥整个区域(当它们应该被封闭时).

任何人都有一个用C语言编写的非递归填充工作源代码(或者c ++不是太大的OOP而且我可以很容易地解开)?

c algorithm flood-fill

17
推荐指数
5
解决办法
2万
查看次数

Android - 使用Flood-Fill时的Canvas Black

当我实施flood-fill课程时,它会变成我整个Bitmap黑色.显然这不是预期的效果.我查看了以下主题:

从我所看到的,我正在做他们在这些解决方案中提出的所有内容,但它并没有让我找到解决问题的方法.所以要切入追逐,这里的代码有一些简短的解释.

XML
我使用相对布局和定位(堆叠)两个ImageViews直接在彼此之上.它们都具有相同的图像,这就产生了能够在图像上绘制的错觉.但是,您实际上只是在透明覆盖上绘图.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    ....

    <ImageView
        android:id="@+id/drawContainer2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/imageMapperSurfaces"
        android:contentDescription="@string/image" />

    <ImageView
        android:id="@+id/drawContainer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/imageMapperSurfaces"
        android:contentDescription="@string/image" />

   ...
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

Canvas
然后我Canvas使用此代码创建我,并确保正确设置我的图层类型.

public void setCanvas() {
    if(mFile != null && mFile.exists()) {
        mPictureBitmap = BitmapFactory.decodeFile(mFile.getAbsolutePath());
        mBitmap = Bitmap.createScaledBitmap(mPictureBitmap, mImageView.getWidth(), mImageView.getHeight(), false);
        mPictureBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true);
        mBitmap = mPictureBitmap.copy(Bitmap.Config.ARGB_8888, true);
        mSceneBitmap = mBitmap.copy(Bitmap.Config.ARGB_8888, true);
        mBlurBitmap = blurImage(mPictureBitmap); 
        mCanvas = new Canvas(mBitmap);
        mImageView.setImageBitmap(mBitmap);
        mImageView2.setImageBitmap(mPictureBitmap); …
Run Code Online (Sandbox Code Playgroud)

android bitmap flood-fill imageview android-canvas

17
推荐指数
1
解决办法
813
查看次数

如何在2D矩阵中找到孔?

我知道这个标题似乎有点含糊不清,因此我附上了一张图片,这将有助于清楚地理解问题.我需要在白色区域内找到洞.一个洞被定义为一个或多个在白色区域内具有值"0"的单元格我的意思是它必须被单元格完全包围,值为"1"(例如,在这里我们可以看到三个标记为1,2和3的孔).我想出了一个非常天真的解决方案:1.在整个矩阵中搜索值为"0"的单元格2.遇到这样的单元格(黑色)时运行DFS(Flood-Fill)并检查我们是否可以触摸主矩形区域的边界3.如果我们可以在DFS期间触摸边界那么它不是一个洞,如果我们不能到达边界那么它将被视为一个洞

现在,这个解决方案有效,但我想知道是否有任何其他有效/快速的解决方案来解决这个问题.

请让我知道你的想法.谢谢.

在此输入图像描述

algorithm search flood-fill

16
推荐指数
1
解决办法
3074
查看次数

目标c中的填埋场

我正在尝试着色应用程序并找出目标c中的任何人之前做过的填充物.???我正在读取图片中的所有像素数据,我也可以更改它..但是洪水填充只能做我想要的.. 示例图像..在这里我可以识别包含黑点的像素.但我真的很混淆如何识别特定白色区域中的像素.非常感谢...

iphone objective-c flood-fill

14
推荐指数
1
解决办法
3925
查看次数

矢量图形泛洪填充算法?

我正在研究一个简单的绘图应用程序,我需要一个算法来填充洪水.
用户工作流程将如下所示(类似于Flash CS,更简单):

  1. 用户在工作区上绘制直线.这些被视为矢量,可以在绘制后进行选择和移动.
  2. 用户选择填充工具,然后单击绘图区域.如果该区域在每个方向上都被线包围,则对该区域应用填充.

如果在应用填充后移动线条,则相应地更改填充区域.

任何人都有一个好主意,如何实现这样的算法?主要任务基本上是确定一个点周围的线段.(以某种方式存储此信息,移动线条)

编辑:解释图像:(画布中当然可以有其他行,对填充算法无关紧要)

在此输入图像描述

EDIT2:更困难的情况:

在此输入图像描述

EDIT3:我找到了一种用孔填充多边形的方法 http://alienryderflex.com/polygon_fill/,现在的主要问题是,我如何找到我的多边形?

language-agnostic geometry vector-graphics actionscript-3 flood-fill

13
推荐指数
1
解决办法
3281
查看次数

OpenCV - 洪水填充到新Mat

给定图像上的一个点,我想要填充连接到该点的所有点 - 但是要填充到新图像上.一种天真的方法是将原始图像填充到特殊的魔术颜色值.然后,访问每个像素,并将具有此魔术颜色值的所有像素复制到新图像.肯定有更好的办法!

opencv image-processing flood-fill

13
推荐指数
1
解决办法
2万
查看次数

使用堆栈填充洪水

我在Java中使用递归Flood填充算法来填充图像的某些区域.使用非常小的图像可以正常工作,但是当de image变大时,JVM会给出Stack Over Flow Error.

这就是我必须使用我自己的堆栈使用Flood Fill重新实现该方法的原因.(我认为这是在这种情况下做到这一点的最好方法)

任何人都可以解释我如何编码吗?(如果你手边没有代码,算法的伪代码就可以了)

我在互联网上看了很多,但我还不太清楚.

编辑:我添加了我的递归代码

public void floodFill(int x, int y, Color targetColor,Color replacementColor) {

    if (img.getRGB(x, y) != targetColor.getRGB()) return;

    img.setRGB(x, y, replacementColor.getRGB());
    floodFill(x - 1, y, targetColor, replacementColor);
    floodFill(x + 1, y, targetColor, replacementColor);
    floodFill(x, y - 1, targetColor, replacementColor);
    floodFill(x, y + 1, targetColor, replacementColor);

    return;

}
Run Code Online (Sandbox Code Playgroud)

谢谢!

java image-manipulation flood-fill

12
推荐指数
2
解决办法
2万
查看次数