Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv Sobel对角线边缘检测(右上45度,左上135度)_Opencv_Edge Detection - Fatal编程技术网

Opencv Sobel对角线边缘检测(右上45度,左上135度)

Opencv Sobel对角线边缘检测(右上45度,左上135度),opencv,edge-detection,Opencv,Edge Detection,我对opencv的Sobel边缘检测器有异议。从其文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定0,1或1,0)有人知道如何使用cvSobel获得45度和135度的对角边吗。 Matlab有一个边缘(i,'Souel'…)选项,但是我的代码都是C++的,我想保持它。 感谢您的建议和解决方案。Hei。 通常可以按以下方式计算任意方向上的任意过滤器: resX=X方向上的计算结果 resY=Y方向上的计算结果 选择所需方向(角度alpha) 所需的结果是sqrt((Y*sin(alpha))

我对opencv的Sobel边缘检测器有异议。从其文档来看,它似乎只适用于水平和垂直方向的边缘(通过指定0,1或1,0)有人知道如何使用cvSobel获得45度和135度的对角边吗。 Matlab有一个边缘(i,'Souel'…)选项,但是我的代码都是C++的,我想保持它。 感谢您的建议和解决方案。

Hei。 通常可以按以下方式计算任意方向上的任意过滤器:

  • resX=X方向上的计算结果
  • resY=Y方向上的计算结果
  • 选择所需方向(角度alpha)
  • 所需的结果是sqrt((Y*sin(alpha))^2+(X*cos(alpha))^2)

  • 这适用于边缘检测、运动模糊和任何线性定向过滤器。

    它确实检测对角线。你只要运行两次。根据定义,水平和垂直的点都是对角线。

    @luhfluh,我有(1,1)个工作点。我正在使用OpenCV2.2。在文档中提到了这个限制吗?@Andrey:(1,1)不是对角的-它是一个双导数(在x和y中)。@etarion,我知道。使用(1,1)可以检索所有边,包括对角线。现在我了解到OP只需要对角边:)@luhfluh,尝试旋转sobel中使用的内核,并调用自定义过滤器hanks@Andrey和@Etarion以获取您的建议。然而,我从以下sudo代码中找到了一种方法:伪代码:cvSobel(graysog,dx,1,0,3)cvSobel(graysog,dy,1,0,3)表示j的高度,表示I的宽度,mag=sqrt(dx[I,j]^2+dy[I,j]^2)如果mag>thresh orient[I,j]=atan2(dy[I,j],dx[I,j]),否则表示方向[I,j]=4