问题标签 [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 投票
1 回答
411 浏览

python - Python 2.7:Canny Edge detection TypeError(“图像数据无法转换为浮点数”)中的错误

我在 Python 2.7.12 中使用 Canny 边缘检测算法和图像(.jpg)

在此处输入图像描述

我使用了以下代码:

但这向我显示了错误,例如

我看到了很多与此相关的答案,但我无法纠正它。我还观察到,如果我将相同的图像保存为 .png,则代码运行完美。我需要在代码中进行哪些修改才能运行 .jpg 文件?谢谢。

0 投票
0 回答
375 浏览

opencv - 霍夫线检测在帧与帧之间不一致

即使场景是静态的,我得到的 HOUGH 线(红色和白色)从一帧视频到下一帧都不同。

帧与帧之间的 Canny 结果也有很多变化。对于我的测试用例,这个问题在这里并不算太糟糕,但对于真实的街景,Canny 检测到的边缘真的从一帧到另一帧都发疯了。

可以看出,许多行也只是被遗漏了。

我意识到噪声因帧而异,但转换为灰度和随后的模糊使输入图像非常接近(至少在我看来)。

发生了什么事,有什么办法可以解决这个问题?

相同的场景 - 不同的结果

0 投票
1 回答
1412 浏览

opencv - 在 OpenCV 3.3 中查找具有复杂背景和丰富纹理的图像中的轮廓

我正在开发一个项目,使用 OpenCV 3.3 处理如下图所示的大理石板图像。

大理石板图像

可以在https://1drv.ms/f/s!AjoScZ1lKToFheM6wmamv45R7zHwaQ上找到更多我正在处理的具有不同大理石纹理和尺寸的样本

要求是:

  1. 将大理石板与背景分开并移除背景(填充白色),以便只显示板。
  2. 计算平板的面积(相机到大理石平板的距离和镜头的参数已知)

我使用的策略是:1)找到大理石板的轮廓,2)删除不在轮廓内的部分,3)获取轮廓的面积大小,4)计算其物理面积。

板坯的轮廓如下图红色所示(这是手工完成的)。

板轮廓

我尝试了几种方法在图像中找到板的轮廓,但由于背景复杂,大理石纹理丰富,未能达到令人满意的效果。

我正在使用的处理逻辑是:将图像转换为灰色并对其进行模糊处理并使用Canny查找边缘,然后使用findContours查找轮廓,代码如下:

我尝试为数十种组合调整模糊和 Canny 参数,但仍然失败。我还尝试使用 HoughLinesP 找到具有几组不同参数的板的边缘,但也没有这样做。

我是计算机视觉的新手,我现在的问题是:

  1. 我是否正在寻找错误的方法或策略来找到平板轮廓?有没有更好的算法或组合?还是我需要专注于调整 Canny/findContours/HoughLinesP 算法的参数?
  2. 由于背景复杂,这种图像真的很难处理吗?

我愿意接受任何可以帮助我完成目标的建议。先感谢您。

0 投票
1 回答
252 浏览

tensorflow - 张量相对于元素邻居的条件值

我正在使用 Tensorflow 实现 Canny 算法(这是使用边界作为评估指标所必需的,但这是题外话)。其中一个步骤是计算“非最大抑制”,这包括将 3x3 区域中的中心元素归零,除非两个特定的邻居更小。更多细节在这里

如何使用 Tensorflow 实现此操作?

我实际上正在使用 Keras,但 Tensorflow 解决方案也可以工作,作为参考,我的代码到目前为止看起来像这样:

0 投票
1 回答
988 浏览

python-3.x - 如何在python中量化Canny边缘检测器中的方向

我试图理解我在 Rosettacode.org 上找到的 Python 中 Canny 运算符的这种实现,但不明白它是如何计算 thetaQ 的。为什么它在这个公式中使用 5 以及它如何量化方向?有人可以帮我吗?

0 投票
0 回答
1246 浏览

python - 如何使用 python-opencv 裁剪图像和边缘

我想使用 opencv Canny 边缘检测来裁剪图像以及边缘。但是我已经写下了边缘检测,但仍然不知道如何将图像与边缘一起裁剪。 在此处输入图像描述

在此处输入图像描述

我只想裁剪图像以及边缘的红色。

0 投票
1 回答
490 浏览

java - 非常精确的线检测,openCV Java

我将首先解释现实世界应用程序中的问题;我有一个指向黑暗表面的相机。进纸器(只是简单的机器,当控制计算机告诉它时会吐出页面)将纸张送入相机正在寻找的区域。

我将使用 openCV 处理图像,并确定进纸器是否正确进纸。

这意味着我不仅要能够确定是否存在页面,还要确定是否存在多个页面。有时会送入多页,因为它们粘在一起,在这种情况下,这些页面非常接近彼此完美对齐,除非您仔细观察,否则它们在视觉上似乎是一页。

我遇到的问题是 Canny 边缘检测与霍夫变换相结合,并没有给我所需的准确度。使用 Canny 在图像中查找纸张的典型示例返回每个页面边缘为多行 (5-15) 的结果。使用查找轮廓确定这是一个矩形。

这些典型示例无济于事,因为我需要能够检测到另一条线非常靠近页面边缘。

我一直在玩霍夫变换的阈值以及我在 Canny 之前应用了多少模糊并且已经得到它相当可靠,但问题是我认为现在灵敏度太低并且任何页面都在上面提供此系统不会检测到示例(在彼此之上)。

例子: 喂养

上图有两个可见页面,一个刚刚从进纸器中出来。页面上有文字。我需要能够识别页面的角度,并且实际上只有一页。

我遇到的问题是我需要足够灵敏的行检测来判断是否有两个页面粘在一起,但我也不需要检测到页面上的文本行。

0 投票
1 回答
1237 浏览

opencv - OpenCV使用相机检测电视屏幕

我正在使用 iPhone 摄像头来检测电视屏幕。我目前的方法是逐像素比较后续帧并跟踪累积差异。结果是二进制图像,如图所示。

原始图像

对我来说,这看起来像一个矩形,但 OpenCV 不这么认为。它的侧面并不完全笔直,有时甚至会有更多的颜色渗出,使检测变得困难。这是我试图检测矩形的 OpenCV 代码,因为我对 OpenCV 不是很熟悉,所以它是从我找到的一些示例中复制而来的。

经过 Canny-step 之后,图像如下所示:

Canny 步后的图像 对我来说似乎很好,但由于某种原因没有检测到矩形。谁能解释我的参数是否有问题?

我的第二种方法是使用 OpenCV Hough 线检测,基本上使用与上面相同的代码,对于 Canny 图像,然后我调用 HoughLines 函数。它给了我很多行,因为我必须降低阈值来检测垂直线。结果如下所示:

霍夫线

问题是有很多行。如第一张图片所示,如何找出与蓝色矩形边相接触的线条?

还是有更好的方法来检测屏幕?

0 投票
1 回答
2015 浏览

python - 如何计算矩形坐标,然后使用opencv和python进行透视变换

原图

在精明的图片之后

透视变换后的图片

你好,

我在做一个小的OCR POC。看原图,我只关心铭牌里面的内容。在识别字符之前,我需要对这张图片做透视变换以增加正确性。看第二张图片,我已经很精明地得到了矩形的轮廓。

我想得到矩形的 4 个角的坐标(用红色标记),这样我就可以导出矩阵并进行透视变换。最后一张图片是我想要的输出。

我是opencv的新手......有人可以给我一些关于如何获得4个角坐标的想法吗?我用谷歌搜索并学习了一些术语,例如霍夫变换?检测线然后计算拐角位置的好方法吗?

如果有人可以向我展示一些python代码来做到这一点,那就太好了,在此先感谢。

0 投票
2 回答
2880 浏览

opencv - 删除 OpenCV HoughLines 检测到的小线条

我试图从嘈杂的图像中检测线条,结果我得到了太多线条。我需要多次遍历行,这对于这么多行来说太慢了,我只对足够长的行感兴趣。

我检测行的代码如下:

我的源图像是源图像

从 Canny 得到的图像是来自 Canny 的结果图像

HoughLines 将检测 100 条线,我只对中间形成矩形的长线感兴趣。如何删除短线?如果我增加 Canny 阈值,则不会检测到我需要的某些行。