应用Canny功能时,您可以先应用蒙版吗?

时间:2017-07-16 10:20:11

标签: python opencv

我一直在学习Canny边缘检测功能,Hough变换和屏蔽,以选择图像中的特定边缘集。

我只是想知道 - 我已经看到人们首先应用这两个功能而第二个应用了面具。首先应用面具会提高性能吗?

当然,如果你只对遮罩区域应用Canny函数和Hough变换,这比将它们应用到整个区域然后选择遮罩区域要快。但也许我是误会。

我不确定它是否相关,但我使用的是Python和OpenCV库。我知道它的功能不能在图像的子集上运行。但我想了解为什么会这样。

1 个答案:

答案 0 :(得分:3)

是的,您可以先应用蒙版,但这样会产生严重的结果。

例如,请考虑以下代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy
from skimage import feature

# Create image
image = scipy.misc.face(gray=True)
plt.figure()
plt.imshow(image, cmap='gray')
plt.title('image')

# Create a simple mask
x, y = np.mgrid[:image.shape[0], :image.shape[1]]
mask = (x > 200) & (x < 500) & (y > 300) & (y < 700)
plt.figure()
plt.imshow(image * mask, cmap='gray')
plt.title('masked image')

# Find edges with both methods
edges1 = feature.canny(image, sigma=3)
edges1 *= mask

plt.figure()
plt.imshow(edges1, cmap='gray')
plt.title('Mask then find edges')

masked_image = image * mask
edges2 = feature.canny(masked_image, sigma=3)

plt.figure()
plt.imshow(edges2, cmap='gray')
plt.title('Find edges then mask')

这给出了这些结果:

enter image description here enter image description here enter image description here enter image description here

请注意,如果在应用边缘检测器之前进行遮罩,则会得到这个奇怪的帧。这是因为屏蔽会创建从一开始就不存在的新边缘。