- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在将 opencv 代码从 C++ 转换为 Python,但卡在了 floodfill 附近的某个地方。
C++ 实现是
Mat floodFilled = cv::Mat::zeros(dilateGrad.rows+2, dilateGrad.cols+2, CV_8U);
floodFill(dilateGrad, floodFilled, cv::Point(0, 0), 0, 0, cv::Scalar(), cv::Scalar(), 4 + (255 << 8) + cv::FLOODFILL_MASK_ONLY);
floodFilled = cv::Scalar::all(255) - floodFilled;
Mat temp;
floodFilled(Rect(1, 1, dilateGrad.cols-2, dilateGrad.rows-2)).copyTo(temp);
我的python实现
h, w = dilateGrad.shape[:2]
floodFilled =np.zeros((h+2,w+2),dtype = np.uint8)
cv2.floodFill(dilateGrad,floodFilled,(0,0),255,cv2.FLOODFILL_MASK_ONLY)
floodFilled = np.all(255) - floodFilled
floodFilled = cv2.rectangle(dilateGrad,1,1,(h-2,w-2),floodFilled,cv2.CV_8U)
我是 python 中 opencv 的新手,感谢任何人的帮助。
最佳答案
最后一行 C++ 代码中的 Rect
运算符用于指定 floodFilled
Mat 的 ROI,并将该 ROI 复制到 Mat temp
.
在 python 代码中可以实现类似的行为,如下所示:
temp = floodFilled[1:h-2, 1:w-2].copy()
至于Scalar
运算符,您必须使用python 的元组代替Scalar
。像 Scalar::all(255)
将等于 tuple([255] * NumberOfChannels)
。对于您当前的情况,NumberOfChannels 是 1,因此它只相当于 255。
代替空的 Scalar()
,只需传递 None
作为参数。
您的最终代码可能如下所示:
h, w = dilateGrad.shape[:2]
floodFilled = np.zeros((h+2,w+2), dtype = np.uint8)
cv2.floodFill(dilateGrad, floodFilled, (0,0), 255, None, None, cv2.FLOODFILL_MASK_ONLY)
floodFilled = (255) - floodFilled
temp = floodFilled[1:h-2, 1:w-2].copy()
仅供引用:
cv2.rectangle
函数的作用是在图像上绘制一个矩形。
np.all
评估作为参数传递给它的二进制条件列表,并且仅当列表中的所有 条件评估为 True 时才返回 True。
关于python - 将 floodfill open cv 从 C++ 转换为 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46641698/
我正在制作一个绘画应用程序,并且洪水填充工具可以工作,但它需要大约两分钟才能填充 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 一半,它淹没了整个图像!然而,只有当我没有在图像周围放置“边框”时,
我是一名优秀的程序员,十分优秀!