3

我正在尝试检测图像中的车辆(实际上是视频中的一系列帧)。我是opencv和python的新手,在windows 7下工作。

有没有办法获得图像的水平边缘和垂直边缘,然后将得到的图像总结成各自的向量?

是否有可用的python代码或函数。

我看了这个这个,但不知道该怎么做。您可以使用下图进行说明。

编辑

我受到以下论文中提出的想法的启发(抱歉,如果您没有访问权限)。

贝特克,M。Haritaoglu, E. & Davis, LS Real-time multiple vehicle detection and tracking from amoving vehicle Machine Vision and Applications, Springer-Verlag, 2000, 12, 69-83

http://i.stack.imgur.com/y5MXl.jpg

4

3 回答 3

1

我会看一下此处发布的 opencv 的正方形示例。它使用精明,然后进行轮廓查找以返回每个正方形的边。您应该能够修改此代码以获得您正在寻找的水平和垂直线。是 canny 的 python 调用文档的链接。它对全方位边缘检测很有帮助。大约一个小时后,我可以回家并给你一个你想要的工作示例。

于 2013-03-05T22:18:25.500 回答
1

通常,用于对象检测的几何方法并不是非常成功,因为您假设的外观模型很容易被遮挡、噪声或方向变化所破坏。

在我看来,机器学习方法通​​常效果更好,并且可能会为您的问题提供更强大的解决方案。由于您似乎正在使用 OpenCV,您可以查看Casacade Classifiers,OpenCV 为其提供了 Haar 小波和基于局部二进制模式特征的分类器。

我提供的链接是一个教程,其中包含非常完整的步骤,解释了如何使用几个预先编写的实用程序创建分类器。基本上,您将创建一个包含汽车“正面”图像的目录和一个包含典型背景的“负面”图像的目录。实用opencv_createsamples程序可用于创建扭曲的训练图像,以从一小组图像中模拟不同的方向和平均强度。然后,您可以使用该实用程序opencv_traincascade设置一些命令行参数来选择不同的训练选项,从而为您输出经过训练的分类器。

可以使用带有此训练分类器的 C++ 或 Python 接口执行检测。例如,使用 Python,您可以加载分类器并在图像上执行检测,以获取选择的边界矩形:

image = cv2.imread('path/to/image')
cc = cv2.CascadeClassifier('path/to/classifierfile')
objs = cc.detectMultiScale(image)
于 2013-03-07T22:28:18.430 回答
1

阅读 Sobel 过滤器。

http://en.wikipedia.org/wiki/Sobel_operator

您基本上可以在每个像素处获得垂直和水平渐变。

这是它的 OpenCV 函数。

http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=sobel#sobel

获得此过滤后的图像后,您可以按列/行收集统计信息,并确定其是否为边缘并获取该位置。

于 2013-03-06T23:49:52.600 回答