cv2.merge((r,g,b)) 是如何工作的?

WIO*_*OUW 5 python opencv image image-processing filter

我正在尝试对具有 RGB 颜色的图像进行线性滤镜。我找到了一种方法,即将图像分割为不同的颜色层,然后合并它们。

IE:

cv2.split(img)
Sobel(b...)
Sobel(g...)
Sobel(r...)
cv2.merge((b,g,r))
Run Code Online (Sandbox Code Playgroud)

我想了解如何cv2.merge((b,g,r))工作以及如何构建最终图像。

ray*_*ica 4

cv2.merge拍摄单通道图像并将它们组合起来形成多通道图像。您已在每个通道上单独运行 Sobel 边缘检测算法。然后,您将结果组合在一起形成最终的输出图像。如果将结果组合在一起,一开始在视觉上可能没有意义,但您将显示的是组合成单个图像的所有三个平面的边缘检测结果。

理想情况下,红色色调将告诉您红色通道中边缘检测的强度,绿色色调将告诉您绿色通道检测的强度,最后蓝色色调将告诉您蓝色通道中检测的强度。

有时,这是一个很好的调试工具,这样您就可以在语义上查看单个图像中每个通道的所有边缘信息。然而,对于具有大量纹理和活动的非常复杂的图像,这很可能很难解释。

更常见的做法是使用颜色边缘检测算法实际进行边缘检测,或者将图像转换为灰度并在该图像上进行检测。

作为前者的一个例子,我们可以将 RGB 图像分解为 HSV 并使用该空间中的颜色信息来进行更好的边缘检测。请参阅 Micka 的回答:基于颜色的 OpenCV 边缘/边框检测