0

任何人都可以告诉我如何创建一个过滤器来检测具有 60 度角的线,如学习 OpenCV 书的练习中所述(单击此处查看在线书籍 - 参见第 190 页)。我只想知道过滤器会怎么样?或者有没有其他方法可以检测 60 度的线?或者如何将滤镜(不是图像)旋转 60 度以检测线条?我更喜欢使用大型过滤器,如 9*9 或 11*11 或 15*15 等。

PS 我知道如何检测标准角度(如 0、90 等)的线条,但对其他角度感到困惑 - 如何在 OpenCV 中将过滤器旋转到不同的角度?

我在 openCV 中找到了 GetRotationMatrix2D 来旋转矩阵,但我猜它会旋转矩阵以形成 2*3 矩阵并旋转图像本身。我想知道我是否可以使用 GetRotationMatrix2D 向任何方向旋转 9*9 矩阵以获得 9*9 矩阵?另外,如果不旋转图像本身,这是否可能?

4

2 回答 2

1

如果您想手动创建过滤器并在 cvFilter2d 中使用,请查看angular filters。只需尝试应用 60 度过滤器,通过增加内核的大小(高度应接近 root3 倍宽度)并在对角线上写入“2”。

检查霍夫变换 及其教程。它输出所有的线角度(根据 x 轴)。

也看看SimpleCV

于 2013-07-10T09:51:23.673 回答
1

定义垂直梯度过滤器 ( mFilter) 后,例如:

 1   1  1 .....1
 .
 1      
 0   0  0 .....0
-1
 .      
-1  -1 -1.....-1

(乘以 1/N^2)

你可以做:

double angleDegree = 60;
Point2f mFilter_center(mFilter.cols/2.0F, mFilter.rows/2.0F);
Mat mRotation60= getRotationMatrix2D(mFilter_center, -angleDegree, 1.0);
Mat mFilter60;
warpAffine(mFilter, mFilter60, mRotation60, mFilter.size());

现在,您可以使用矩阵mFilter60作为 60 度边缘检测滤波器。但是请注意,这是一个定向过滤器,您需要通过将mFilter60与 -1 相乘来反转过滤器元素以获得剩余的边缘。

于 2013-07-10T10:13:08.097 回答