我一直在尝试检测和跟踪视频流中的车辆。最近,我决定实现一种硬编码方法,该方法可以找出车辆的阴影并根据轮胎位置检测整个车辆。最后,我部分完成了我的实现。这是示范的video link

第一步,我使用Canny边缘检测器减去视频帧的边缘。

opencv - 如何在特定角度范围内执行霍夫变换-LMLPHP

然后,我在opencv中使用了hough变换函数。

opencv - 如何在特定角度范围内执行霍夫变换-LMLPHP

但是,此功能可以找到所有水平线和垂直线,而我只对可能是车辆阴影的水平线感兴趣。

opencv - 如何在特定角度范围内执行霍夫变换-LMLPHP

我的问题是如何使用霍夫线变换功能,该功能仅检查在特定 Angular 范围内和特定范围内的线。是否有任何 Angular 参数?还是我应该自己实现该功能?

最佳答案

由于在Canny运算之后最终会得到二进制图像,因此在应用霍夫变换之前,使用简单的水平Prewitt运算符将图像卷积可能是最简单的:

 1    1    1
 0    0    0
-1   -1   -1

这将为您提供每个像素的灰度强度图,水平边缘的像素给出最强的信号。仅使用水平运算符的优点是垂直边缘不接收任何放大,水平边缘接收最大的放大,并且在水平线45度以内的任何边缘都应在两者之间的某个位置发出信号。当您将检测边缘应用于原始图像时,可以使用结果图像来确定保留Canny掩模中的哪些像素:如果Prewitt信号高于某个像素的某个阈值,则假定该像素沿“水平”方向。保留足够的边缘,否则丢弃。我相信opencv具有此功能,但如果没有,则实现起来很简单。

关于opencv - 如何在特定角度范围内执行霍夫变换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34969676/

10-12 17:40