谢谢你看看。
当我在this website
上阅读概念帮助时,会弹出问题当应用具有不同给定方向的梯度卷积滤波器时,根据光强度给出不同的边缘,请参见以下内容:
filter result with positive direction
filter result with negative direction
然后我试图在opencv中用y轴cv2.Sobel
实现相同的功能。
cv2.Sobel(img,cv2.CV_8U,0,1)
代码仅显示一个方向上检测到的边缘。我没有设法改变方向来显示另一个强度检测到的边缘。
我知道使用CV_64
,可以检测到两者,但我希望将它们分开,与之前显示的示例完全相同。
我找到了一个技巧来反转图像img=255-img
的b / w,然后应用相同的过滤器cv2.Sobel(img,cv2.CV_8U,0,1)
云显示我预期的另一个边缘。
我想知道是否可以通过cv2.Sobel
函数或任何其他opencv过滤器控制此过滤器方向,而无需反转图像的黑白。
答案 0 :(得分:2)
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]])