在彩色图像上使用精明

Posted

技术标签:

【中文标题】在彩色图像上使用精明【英文标题】:Using canny on colored image 【发布时间】:2020-10-24 18:18:05 【问题描述】:

我是图像处理和 opencv 的新手,但最近我正在研究边缘检测的想法,对此我有疑问:

canny 可以直接应用于彩色图像而不将其转换为灰度吗?这会影响结果吗?我试过了(使用c++ opnencv函数)没有错误或问题,结果与我将图像更改为灰度后的结果不同。

我读到对于彩色图像,我应该分别在每个通道上应用 canny,然后组合结果.. 好吧,假设每个通道有 3 个结果,如何将它们组合在一起以获得最终结果?

处理灰度图像是否真的比彩色图像更快,因为在后期我们有 3 个通道(逻辑上看起来是的,但没有参考比较每种方法的优缺点;我所拥有的只是灰度是更快,而对于图像分割,彩色图像可以提供更多信息)在边缘检测的概念中,使用彩色图像是否更好?

【问题讨论】:

这能回答你的问题吗? Can Canny in OpenCV deal with both grayscale and color images? @Burak 谢谢,但它只回答第一个,而不是第二个和第三个 【参考方案1】:

如果你接受 python,那么你可以这样做:

第二个问题:


    分离通道使用split方法分离通道,对每个通道应用不同的阈值水平Canny,然后使用merge方法组合结果。

import cv2   

img = cv2.imread("grl.jpg")
(B, G, R) = cv2.split(img)
B_cny = cv2.Canny(B, 50, 200)
G_cny = cv2.Canny(G, 50, 200)
R_cny = cv2.Canny(R, 50, 200)
img_cny = cv2.merge([B_cny, G_cny, R_cny]) 

结果:


可能的问题:为什么split 返回BGR

答案:opencv 以(BGR) 格式读取图像,因此split 返回(B, G, R) 格式

你也可以直接应用到图片上(感谢@fmw42):

结果:

第三个问题:


是的,处理灰度图像比处理彩色图像要快得多。

我们看到不同颜色的图像,但计算机看到的是值矩阵:

例如:

25 45 67 37 90 ..
56  .
46     .     
34        .
13           .
.
.

矩阵中的每个单元格可以在 0-255 之间变化。灰度图像(矩阵)只有1个通道,彩色图像有3个通道(矩阵)

因此,您可以认为计算单矩阵(灰色)比计算 3 矩阵(图像)要快

【讨论】:

谢谢,所以合并频道是可以接受的,我不确定这是否可以接受 我没有看到任何限制精明到灰度图像的限制。见docs.opencv.org/4.1.1/dd/d1a/… 感谢@fmw42 的警告。

以上是关于在彩色图像上使用精明的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV 将梯度/幅度应用于图像?

在opencv matchtemplate源代码中使用什么方法来处理彩色图像?

二进制阈值图像-> 应用精明的边缘检测-> findContour(),这会改善轮廓检测吗?

将 CVD 图像转换为彩色 OpenCV 图像

是否可以将图像放在带有iText的彩色矩形上?

彩色图像的边缘检测 CannyAlgorithm