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

2024-05-31

我有一些关于Canny 边缘检测器 in OpenCV.

这是我尝试过的代码。

def auto_canny(image, sigma=0.33):
    v = np.median(image)
    lower = int(max(0, (1.0 - sigma) * v))
    upper = int(min(255, (1.0 + sigma) * v))
    edged = cv2.Canny(image, lower, upper)

then,

##### first situation #####
img = cv2.imread('mango.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
auto = auto_canny(gray)
cv2.imwrite('mango_gray_edge.jpg', auto)

In this situation, I got an image like this: enter image description here

##### second situation #####
img = cv2.imread('mango.jpg')
auto = auto_canny(img)
cv2.imwrite('mango_color_edge.jpg', auto)

in this situation, I got an image like this: enter image description here

and this is the original image:

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

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

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

所以我的问题是,

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

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

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

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


是的,OpenCV 的 Canny 实现可以处理多个通道。


请记住,OpenCV 是开源的,因此您只需检查实现即可找到此类信息。

基本上,Canny 在非极大值抑制之前所做的是计算幅度 (norm)每个像素的梯度,根据索贝尔导数(dx and dy)。 如果您有多个频道,如您所见在源代码中 https://github.com/opencv/opencv/blob/08906ddd4b57f6e93143b0f0bf861b782f5d7877/modules/imgproc/src/canny.cpp#L481-L498,给定像素的梯度大小是所有像素中最高的ch渠道。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenCV 中的 Canny 可以同时处理灰度图像和彩色图像吗? 的相关文章

随机推荐

  • 密码盒和 MVVM

    我们有以下场景 MVVM 用户界面 用户可以在其中输入密码 实际上是一个PasswordBox 应该做一些工作的服务器 服务器连接到一些需要身份验证的数据库 我已经读过这个关于MVVM中PasswordBox的问题 https stacko
  • 如何只读取文件的第一行

    我已经用谷歌搜索了一段时间 但我找不到只读取文件第一行的函数 我需要读取文本文件的第一行并从中提取日期 Perl 新手 open my file lt filename txt my firstLine lt file gt close f
  • 人们想要使用嵌套类的原因是什么? [复制]

    这个问题在这里已经有答案了 In 这个 stackoverflow 答案 https stackoverflow com questions 3299562 what kind of access modifiers can be appl
  • ER_ACCESS_DENIED_ERROR:用户 ''@'localhost' 的访问被拒绝(使用密码:NO)

    我有这个问题 我已经研究过但无法解决它 我想它与数据库权限有关 但我无法修复它 if error throw error Error ER ACCESS DENIED ERROR Access denied for user localho
  • log4j.RollingFileAppender 不压缩文件

    如何在 log4j 中压缩备份文件RollingFileAppender 我有以下log4j 属性file 当超过大小限制时 它会创建备份文件但不会压缩它 log4j appender request org apache log4j Ro
  • C#:如何在 Socket.BeginReceive 回调之前终止套接字?

    我有一个接收来自客户端的连接请求的服务器 该服务器使用异步Socket BeginReceive and Socket EndReceive方法 该代码与找到的代码非常相似here http msdn microsoft com en us
  • 通过 CultureInfo 格式化字符串

    我想显示英镑符号和格式 0 00 即 45 00 4 10 我正在使用以下语句 td style text align center td 但它不起作用 问题是什么 谁能帮我 Use the Currency http msdn micro
  • UWP XAML 使用 VisualStateManager 更改目标的样式

    我正在使用 Style 来自定义我的组件
  • 在 header.php 中设置变量但在 footer.php 中看不到

    在WordPress中 我设置了一个变量header php but in 页脚 php当我回应它时 我没有打印任何东西 为什么 gt 您不在同一范围内 因为页眉和页脚文件包含在函数体中 因此 您正在声明一个局部变量 并引用另一个局部变量
  • 是否可以忽略 Matplotlib 绘图的第一个默认颜色?

    Matplotlib plots each column of my matrix a with 4 columns by blue yellow green red Then I plot only the second third fo
  • 使用多处理和 PySftp 并行下载

    我正在尝试创建一个代码来使用 pysftp 和多处理库下载相同类型的 N 个文件 我做了一个基本的Python训练 得到了一些代码并将它们组合成一个 但我无法让它工作 如果有人帮助我 我将不胜感激 该错误发生在 vFtp close 命令之
  • Hadoop-reducer 如何获取数据?

    据我所知 映射器为每个减速器生成 1 个分区 减速器如何知道要复制哪个分区 假设有 2 个节点运行用于字数统计程序的映射器 并且配置了 2 个缩减器 如果每个映射节点生成 2 个分区 并且两个节点中的分区都可能包含相同的单词作为键 那么减速
  • R 无法解析为变量

    我想修复这个错误 R 无法解析为变量 我查了很多答案 但找不到正确的答案 我尝试了一切 有人可以帮助我吗 我的主要活动是自动创建的 显示错误的是从以下位置开始的三行case R id button1 package de vogella a
  • 项目之间的点线

    我正在建立一个餐厅网站和菜单 我需要在菜单项和价格之间画一条 点线 我需要得到它 而不需要手动一一写点 此功能应该自动工作 是否可以使用 span 或 div 等背景来创建它 我拥有的 我想要的是 我想你正在寻找这样的东西 html div
  • 断开连接期间处理 pyserial 中的异常

    我有从串口读取数据的代码 try dataIn self port read 100 except serial SerialException do some work return None 如果我断开设备连接 我会捕获我无法处理的异常
  • 我可以在不使用 python 打开浏览器的情况下将 selenium 与 Scrapy 一起使用吗

    我想用 scrapy 和 python 进行一些网络爬行 我从互联网上发现了一些代码示例 其中他们将 selenium 与 scrapy 一起使用 我不太了解selenium但只知道它会自动执行一些网络任务 浏览器实际上会打开并执行一些操作
  • 如何为 com.sun.tools.javac.Main.compile() 函数设置类路径?

    我在用com sun tools javac Main compile 函数在运行时从我的 struts 项目编译 java 文件 但对于某些文件 他们需要一些特定的 jar 例如 axis2 我有 jar 但如何将它们设置为类路径以在运行
  • 使用 pyspark awsglue 时显示 DataFrame

    如何使用 awsglue 的 job etl 显示 DataFrame 我尝试了下面的代码 但没有显示任何内容 df show code datasource0 glueContext create dynamic frame from c
  • 如何转换为在视图上使用 Yii CDataProvider?

    我正在尝试学习 Yii 并查看了 Yii 文档 但仍然没有真正理解 我仍然不知道如何在控制器和视图上使用 CDataProvider 来显示视图上可用的所有博客文章 任何人都可以根据以下内容提供建议或举例 我的 PostController
  • OpenCV 中的 Canny 可以同时处理灰度图像和彩色图像吗?

    我有一些关于Canny 边缘检测器 in OpenCV 这是我尝试过的代码 def auto canny image sigma 0 33 v np median image lower int max 0 1 0 sigma v uppe