问题标签 [canny-operator]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1302 浏览

c++ - Canny 边缘检测 - 非最大抑制实现

我正在尝试在 OpenCV 的帮助下从头开始实现 Canny 边缘检测算法。我在实施有助于减薄边缘的非最大抑制步骤时遇到问题。

我的逻辑是首先计算强度梯度向量,然后将其分组为 0、45、90、135 度方向,然后尝试找到局部最大值。找到这个局部最大值的方法是确保当前像素大于同一方向上的后续像素和前面的像素。如果不是,我将零值分配给该像素。使用这个逻辑,我仍然无法缩小边缘。我觉得错误是在我计算每个像素的强度梯度向量时。

这是我的代码-

}

0 投票
0 回答
331 浏览

python - 通过 OpenCV 在时间序列(数据数组)中通过 Canny 算法查找边

就像这里演示的那样:http ://www.cs.unc.edu/~nanowork/cismm/download/edgedetector/#application

我想在仅由 x 和相关 y 值组成的时间序列中找到边缘。

我认为精明算法可能是这项任务的一个很好的解决方案。我想为这个解决方案使用 OpenCv canny。到目前为止,我的代码如下所示:

因此,我希望有一个数组填充找到的边缘,如上面链接中所示。

非常感谢。

0 投票
1 回答
10385 浏览

python - OpenCV 中的 Canny 可以同时处理灰度和彩色图像吗?

我对OpenCV中的Canny 边缘检测器有一些疑问。

这是我尝试过的代码。

然后,

在这种情况下,我得到了这样的图像: 在此处输入图像描述

在这种情况下,我得到了这样的图像: 在此处输入图像描述

这是原始图像:

第一种情况和第二种情况的区别在于我是否将彩色图像转换为灰度。但是,我对此感到困惑。因为,

在第一种情况下,我将图像转换为灰度,因此图像只有一个通道。而在第二种情况下,图像仍然具有三个通道。

当我没有将其转换为灰度时,边缘会好得多,就像在第二种情况下一样。

所以我的问题是,

  1. OpenCV 中的 Canny 函数是否包含将图像转换为灰度的方法?我的意思是,我需要在使用之前将图像转换为灰度cv2.Canny()吗?

  2. Canny 如何同时处理单通道(第一种情况转换为灰度)和三通道(原始图像如第二种情况)图像?

  3. Canny 实际是如何工作的?Canny可以直接处理彩色图像还是必须先将彩色图像转换为灰度?

  4. 从Canny的步骤来看,我们计算梯度的时候,我觉得应该是单通道的,然后就可以计算了。如果图像是彩色的(三个通道),我们如何计算梯度?我们分别计算三个通道吗?它是如何工作的?

0 投票
2 回答
1629 浏览

matlab - 使用canny方法进行一定程度的边缘检测

我正在使用 MATLAB。我想使用精明的方法进行边缘检测。但我需要对角线的边缘或仅在 40 到 50 度角的边缘。我怎样才能做到这一点?

0 投票
1 回答
2559 浏览

matlab - 定向 Canny 边缘检测

我想使用 Canny 方法检测边缘。最后我想要两个边缘图:1 代表水平方向 1 代表垂直方向。

在 MATLAB 中,这可以通过使用带有额外方向参数的 Sobel 或 Prewitt 运算符来实现,但对于 Canny,我们没有此选项。

知道如何使用 Canny 分别提取水平和垂直边缘吗?

0 投票
2 回答
3496 浏览

c++ - OpenCV - 查找对象形状

我正在学习 OpenCV,我已经到了无论我做什么都会卡住的地步。我要做的是将对象(矩形对象)与其背景隔离开来。

一个例子是下面的电池图片: 电池图片

我想掩盖该图像,以便唯一剩下的就是对象。

我尝试了以下方法:

  • 阈值化
  • 使用 Canny 检测边缘
  • 查找轮廓
  • 得到更大的

但是我得到了一些奇怪的区域作为更大的区域。以下是结果图片:

  • 精明的 精明的边缘

  • 最大轮廓 在此处输入图像描述

这是我正在使用的代码:

这段代码旨在获取对象的“掩码”,然后应该应用掩码,但我无法继续前进,因为我无法检测到对象

我的目标是检测不同图像中的矩形对象(每张图像只有一个对象)。

这个想法是从这里得到的,但我无法让该代码与像我这样的对比度较低的图像一起使用。

我也试过这个和我想要的差不多。

我想隔离一个矩形对象(应该是图像中较大的对象)

提前致谢!

PS:虽然我可以将 Python 翻译成 C++,但我希望能直接在 C++ 中得到答案,这样我可以更快地对其进行测试。

0 投票
0 回答
2851 浏览

c# - emgu 中的 Canny 边缘检测会丢失边缘

我正在用 C# 编程,我使用 EmguCV (3.1)。我使用 CvInvoke 类的 Canny 边缘检测器。我的问题是这个算法没有找到一些边缘。我的 OpenCL = 真。这是我的问题:

输入图像:
矩形

结果: 边缘

如您所见,未旋转的矩形会丢失其顶部边缘。我的问题是:

1-正常吗?
2-如果没有,我该如何解决?

这是我的代码:

0 投票
1 回答
796 浏览

c++ - 如何只保留opencv android库的一个模块(Canny Edge Detection)?

我目前正在开发一个涉及Canny Edge Detection的android应用程序。我决定使用比使用 Java 快得多的opencv库。所以我将libopencv_java.so文件放在了它们各自的目录中。它有效,但导致了巨大的 apk 大小。我不太了解 C++ 语言。是否可以生成仅包含边缘检测所需组件的 libopencv_java.so 文件以减小 apk 大小?

如果是,如何?

否则请建议其他快速和较小的库在 android 中执行 Canny 边缘检测。

0 投票
1 回答
790 浏览

opencv - 检测边缘(连接边缘)并找到边缘长度和连接分量回转半径

原始图像 我正在尝试检测此图像中连接边界的集群。我需要找到这些边缘的长度以及各个集群的回转半径。我正在使用 opencv 2.4.13。我使用以下代码使用轮廓检测​​质量簇。

问题是公共共享边的轮廓变得不同,逻辑上它们应该属于同一个集群。我给出的以下轮廓图像。 在一定长度以上提取的轮廓

我们可以看到许多具有相同共享边的轮廓被分别视为不同的轮廓。我希望它们成为相同边界集群的一部分。还建议我如何检测边界的长度和回转半径。请帮忙。

0 投票
1 回答
208 浏览

python-2.7 - 在opencv中调用“重载成员函数”

在 OpenCV 中,某些函数具有“重载成员”对应项(例如,Canny 边缘检测)。

我的问题是:如何在我的代码中调用这个重载函数?如果我调用 cv2.Canny(),无论参数如何,它都会调用“标准 Canny ”。

我在 Ubuntu 14 上使用 Python 2.7(与 C++ 相比,这可能是这个问题的一个问题?)和 OpenCV 3.1。

这是一个 MWE:

谢谢