python - openCV中梯度滤波器的方向

标签 python opencv

感谢您的浏览。

当我阅读 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/

相关文章:

python - 为什么 Theano 打印 "cc1plus: fatal error: cuda_runtime.h: No such file or directory"?

Python - 从二进制文件中读取字符串

c++ - 使用 OpenCV 的 Blob。哪个图书馆最好?

iphone - 将图像保存到 iPhone 时出错

python-3.x - 使用 anaconda python 3.6 ( 在 mac 上) 安装 opencv 时遇到问题

c++ - 如何在 SVM 分类器中重用训练信息

python - 为什么 RotatingFileHandler 附加到旧文件?

python - numpy recfromcsv 和 genfromtxt 跳过数据文件的第一行

c++ - OpenCV 和网络摄像机 - 或者 - 如何监视邻居?

Python-在类的第一个实例上加载数据