感谢您的浏览。
当我阅读 this website 上的概念帮助时,出现了这个问题
当应用梯度卷积滤波器时,在不同的给定方向上,根据光强度给出不同的边缘,请参见以下内容:
filter result with positive direction
filter result with negative direction
然后我尝试在 opencv 中使用 cv2.Sobel
实现相同的功能在 y 轴上。
cv2.Sobel(img,cv2.CV_8U,0,1)
该代码仅显示检测到的一个方向的边缘。我没能改变方向来显示用另一种强度检测到的边缘。
我知道 CV_64
,可以检测两者,但我希望将它们分开,与前面的示例完全相同。
我发现了一个反转图像黑白的技巧 img=255-img
,然后应用相同的过滤器 cv2.Sobel(img,cv2.CV_8U,0,1)
正如我所预料的那样,云显示了另一个优势。
我想知道是否可以通过 cv2.Sobel
来实现函数或任何其他 opencv 滤波器来控制该滤波器方向,而无需反转图像的黑白。
最佳答案
OpenCV 允许您仅在 y 和 x 方向应用 Sobel 滤波器。您可以查看documentation查看有关所应用内核的更多信息。
对于 x 方向,它是:
cv2.Sobel(img,cv2.CV_8U,1,0)
对于 y 方向:
cv2.Sobel(img,cv2.CV_8U,0,1)
最后 2 个数字分别表示图像在 x 和 y 上的导数阶数。您可以同时在两个方向上拥有更复杂的:
cv2.Sobel(img,cv2.CV_8U,1,1)
此外,我发现在您的图像中还有另一个运算符(对角线)。我不确定您是否可以直接使用 sobel 函数来完成此操作,但当然您可以使用 filter2D “手动”执行此操作.
cv2.filter2D(img, cv2.CV_8U, kernel)
其中 kernel 是图像中出现的内核矩阵。
kernel = np.array([[0, -1, -1],
[1, 0, -1],
[1, 1, 0]])
关于python - openCV中梯度滤波器的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45954783/