我对一些问题Canny边缘检测中的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)
Run Code Online (Sandbox Code Playgroud)
然后,
##### 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)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到了这样的图像:
##### second situation #####
img = cv2.imread('mango.jpg')
auto = auto_canny(img)
cv2.imwrite('mango_color_edge.jpg', auto)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到了这样的图像:
这是原始图像:
第一种情况和第二种情况的区别在于我是否将彩色图像转换为灰度。但是,我对此感到困惑。因为,
在第一种情况下,我将图像转换为灰度,因此图像具有单个通道。而在第二种情况下,图像仍然具有三个通道。
当我没有将其转换为灰度时,边缘会好得多,就像在第二种情况下一样。
所以我的问题是,
OpenCV 中的 Canny 函数是否包括将图像转换为灰度的方法?我的意思是,我需要在使用之前将图像转换为灰度cv2.Canny()
吗?
Canny 如何同时处理单通道(第一种情况转换为灰度)和三通道(原始图像如第二种情况)图像?
Canny实际上是如何工作的?Canny …