使用 OpenCV python 在一个窗口中结合多个 Canny 边缘检测

Posted

技术标签:

【中文标题】使用 OpenCV python 在一个窗口中结合多个 Canny 边缘检测【英文标题】:Combine several Canny edge detection in one window using OpenCV python 【发布时间】:2020-10-27 00:43:08 【问题描述】:

我做了三个不同阈值的精明边缘检测,然后以不同的方式更改颜色线,现在我想将所有这些线组合在一个窗口中显示。以一张图片为例: Edge detection with different colors

到目前为止,这是我的代码:

edges1 = cv2.Canny(frame,30,50)
rgb1 = cv2.cvtColor(edges, cv2.COLOR_GRAY2RGB) # RGB for matplotlib, BGR for imshow() !

edges2 = cv2.Canny(frame,20,60)
rgb2 = cv2.cvtColor(edges, cv2.COLOR_GRAY2RGB) 

edges3 = cv2.Canny(frame,40,40)
rgb3 = cv2.cvtColor(edges, cv2.COLOR_GRAY2RGB) 


# multiply with another array to change line colors:
rgb1 *= np.array((1,0,0),np.uint8) 
rgb2 *= np.array((0,1,0),np.uint8)
rgb3 *= np.array((0,0,1),np.uint8)



cv2.imshow('Deteksi Tepi dengan Canny', rgb1)

【问题讨论】:

【参考方案1】:

在 Python/OpenCV 中,我相信您可以对彩色帧图像进行 Canny 边缘检测,结果将是一张带有彩色边缘的图像。

OpenCV 按 BGR 顺序使用颜色。 Matplotlib 按 RGB 顺序使用颜色。但是如果你使用 RGB 顺序,那么 cv2.imshow(会显示错误的颜色)。它需要BGR命令。

如果框架是彩色的,就这样做

canny = cv2.Canny(frame,30,50)

或者,将通道与框架分开,并对每个通道进行精巧的边缘处理。然后将 3 个 canny 结果组合到每个颜色通道中。

b,g,r = cv2.split(frame)
b_edge = cv2.Canny(b,30,50)
g_edge = cv2.Canny(g,30,50)
r_edge = cv2.Canny(r,30,50)
edge = cv2.merge([b_edge, g_edge, r_edge])
cv2.imshow('Color Canny', edge)

【讨论】:

谢谢,我之前是把框架做成灰度的。但这行得通。

以上是关于使用 OpenCV python 在一个窗口中结合多个 Canny 边缘检测的主要内容,如果未能解决你的问题,请参考以下文章

通过opencv制作人脸识别的窗口,这也太疯狂了

OpenCV-Python+Moviepy 结合进行视频特效处理

opencv之python版图像的读取显示保存像素遍历以及结合matplotlib使用

[OpenCV-Python] OpenCV 中视频分析 部分 VI

如何在 macOS 中关闭 OpenCV 窗口(Python 3)?

如何在openCV python中将背景减法与密集光流跟踪相结合