- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
是否有用于 python/openCV 的 floodFill 函数获取种子列表并开始改变其邻居的颜色?我知道 simplecv 是一个类似的函数 SimpleCV floodFill . OpenCV 说它有两个 floodFill 函数,一个使用掩码,另一个不使用,documentation ,我无法在没有掩码和种子列表的情况下使用 opencv floodfill 函数。有帮助吗?
这是我目前正在尝试做的事情:
A=array([[0,1,1,0],[0,0,0,0],[1,1,1,1],[1,1,1,1]],np.uint8)
mask = np.ones((A.shape[0]+2,A.shape[0]+2),np.uint8)
mask[1:-1,1:-1] = np.zeros((A.shape))
cv.floodFill(A, mask, (3,0), 0,0,0, flags=4|cv.FLOODFILL_MASK_ONLY)
print mask
返回的掩码:
[[1 1 1 1 1 1]
[1 1 0 0 1 1]
[1 1 1 1 1 1]
[1 0 0 0 0 1]
[1 0 0 0 0 1]
[1 1 1 1 1 1]]
预期掩码:
[[1 1 1 1 1 1]
[1 0 0 0 0 1]
[1 0 0 0 0 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]
[1 1 1 1 1 1]]
原始图片:
[[0 1 1 0]
[0 0 0 0]
[1 1 1 1]
[1 1 1 1]]
最佳答案
如果您仔细查看文档,这就是 mask 的目的之一。您可以每次使用不同的种子多次调用该函数(第二版),最后掩码将包含已被填充的区域。如果新种子属于已经被淹没的区域,您的函数调用将立即返回。
使用 FLOODFILL_MASK_ONLY 标志,然后使用此掩码在末尾使用 setTo() 以所需的填充颜色绘制输入图像。 (你必须使用 Mask 的子图像!删除第一行和最后一行和列)。请注意,如果将 loDiff
或 upDiff
设置为不同于默认值零的值,则根据处理种子点的顺序,floodfill 可能会产生不同的结果。
另请查看 this .
关于python - 具有多个种子的 OpenCV FloodFill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364678/
我正在制作一个绘画应用程序,并且洪水填充工具可以工作,但它需要大约两分钟才能填充 400x180。我可以做什么来加快这个过程?这是我目前使用的代码。 public void gradientSize(
我必须第一次使用洪水填充算法才能解决作业中的任务。主要问题是我写的洪水填充函数的调用好像不起作用。 我的任务与此处描述的任务非常相似: How can I find hole in a 2D matr
我想填充下面张贴的图像的某个区域“左侧的矩形”。为了填充该区域,我在该矩形内指定了一个点以了解像素值,如下所示: Log.D(TAG, "", "PixVal: "+gsMat.get(100
我正在尝试在 UIImage 上进行 Floodfill 并最终使用 OpenCV 框架。我可以通过将颜色定义为 cv::Scalar(255,0,0) 来用纯色替换颜色。但是我希望填充选择是透明的。
这是一个示例代码,显示了 cv2.floodfill 函数的用法 import cv2 import numpy as np import os def imshow(img): cv2.im
我有一个包含图像的Java程序,我正在尝试使用洪水填充算法来使用以下函数(canvas)将封闭区域内的每个黑色像素替换为白色像素是一个BufferedImage): public void flood
public void floodFill(int x, int y) { if (x >= 0 && x = 0 && y = 0 && x = 0 && y <= 9) {
我的应用程序有一个静态控件,里面有一个选项卡控件。它看起来像这样: alt text http://img834.imageshack.us/img834/5645/topbar.png 我想处理顶部
我已经实现了来自 here 的连接组件识别算法,但在某些情况下,cv::floodFill(...) 似乎会填充未连接的区域。 首先,这是代码: void ImageMatchingOpenCV::g
我尝试在我的 android 应用程序上使用 floodFill 算法。我点击一个点来选择种子。然后我运行 floodfill 算法。我想显示与种子颜色相同的仅选定区域。为此,我显示 mask 垫对象
我有一个循环遍历图像并每 20 个像素进行一次填充: h, w = image.shape[:2] mask = np.zeros((h+2, w+2), np.uint8) mask[:] |= 0
下面的最小示例似乎陷入了无限循环。它运行了几分钟,然后最终因 std::bad_alloc (OpenCV 3.0) 而崩溃。 int main() { cv::Mat img( cv::Si
我被我的洪水填充算法困住了:它在“正常”不应该的时刻停止...... 情况是这样的:我有一个 512*512 像素的矩阵,值是 50 或 100 左右。值 50 形成一个正方形,我想将其更改为值 25
我正在尝试实现 floodfill。这适用于 500x500 矩阵: int ud[]={1,0,-1,0}; int lr[]={0,1,0,-1}; void fl(int x,int y) {
我正在尝试计算每组零的邻接零的数量。我使用了 floodfill 的修改版本,它返回它填充的元素数。然后我将对 floodfill 的调用放在一个循环中。我不明白这有什么问题。 正确的输出:2 4 当
我正在尝试编写我的第一个简单的扫雷游戏。为了显示空白字段,我编写了一个简单的洪水填充算法,但它没有按预期工作。这是一段代码: function reveal(a,b){ var fieldId = g
我被分配通过两种方式实现一个floodfill算法:递归a void RFloodFill(PGM *entrada, int x, int y, unsigned char corAtual, 最佳
我的任务是使用递归和 2D Ascii 图像在 Java 中编写洪水填充算法。我编写了代码并且它运行良好,但我不确定我是否可以将它写得更简单,因为我使用了太多 if 语句来检查一些东西,比如当前点在哪
我正在尝试用 Java 制作类似扫雷的游戏,并且我已经完成了其中的大部分工作。我需要帮助的是 FloodFill - http://en.wikipedia.org/wiki/Flood_fill .
我一直在使用基于堆栈的非递归变体的填充算法,它似乎完美地工作除了一个烦人的情况:如果使用一条线将图像切成两半然后floodfill 一半,它淹没了整个图像!然而,只有当我没有在图像周围放置“边框”时,
我是一名优秀的程序员,十分优秀!