如何解决在彩色图像上使用Canny
我是图像处理和Opencv的新手,但是最近我正在研究边缘检测的想法,对此有疑问:
-
可以将canny直接应用于彩色图像而不将其转换为灰度吗?这会影响结果吗?我尝试了一下(使用c ++ opnencv函数),没有错误或问题,结果与将图像更改为灰度后的结果不同。
-
我读到彩色图像,我应该分别在每个通道上应用canny,然后合并结果。.好的,假设每个通道有3个结果,如何将它们组合在一起以获得最终结果?
-
在灰度下处理彩色图像的速度是否真的比在彩色图像上处理的速度快,因为在后面我们有3个通道(从逻辑上看是可以的,但是每种方法的优缺点之间没有比较的参考;我所拥有的只是灰度更快,而对于图像分割,彩色图像可以提供更多信息)在边缘检测的概念中,是否使用彩色图像更好?
解决方法
如果您接受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,200) R_cny = cv2.Canny(R,200) img_cny = cv2.merge([B_cny,G_cny,R_cny])
-
结果:
-
可能的问题:为什么
split
返回B
,G
和R
? -
答案:Opencv以
(BGR)
格式读取图像,因此split
返回(B,R)
格式 -
您还可以直接将其应用于图像(感谢@ fmw42):
-
结果:
第三个问题:
-
是的,处理灰度图像比彩色图像要快得多。
-
我们看到的图像具有不同的颜色,但是计算机看到的是值的矩阵:
-
例如:
-
25 45 67 37 90 .. 56 . 46 . 34 . 13 . . .
-
矩阵中的每个单元格可以在0-255之间的范围内变化。灰度图像(矩阵)只有1个通道,彩色图像有3个通道(矩阵)
-
因此,您可以认为计算单个矩阵(灰色)比计算3个矩阵(图像)要快
-
-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。