2013-03-05 79 views
2

我试图检测图像中的车辆(实际上是视频中帧的序列)。我是新来的opencv和python,并在Windows 7下工作。使用python-opencv的水平和垂直边缘配置文件

有没有办法获得图像的水平边缘和垂直边缘,然后将合成图像加总到相应的矢量?

是否有Python代码或函数可用于此。

我看着thisthis,但不知道该怎么做。 您可以使用以下图片进行说明。

编辑

我被下面的文件中提出这一观点的人们(抱歉,如果你没有访问权限)。

Betke,M .; Haritaoglu,E. &戴维斯,LS实时多个车辆检测,并在移动车辆上机器视觉和应用,施普林格出版社,2000年,12跟踪,69-83

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

回答

1

我会看看在opencv的方块示例中,发布了​​。它使用canny,然后轮廓查找返回每个方块的边。您应该可以修改此代码以获取您正在查找的水平和垂直线。 Here是canny的python调用文档的链接。这对所有的边缘检测都很有帮助。大约一个小时后,我可以回家并给你一个你想要的东西的实例。

+0

谢谢。我提供的图像(方形)仅用于说明目的,因为我没有道路上的免费车辆图像 – 2013-03-05 22:33:31

+0

如果您确切地知道车辆后部的外观是什么样子,并且可以假定它仍然是相对恒定的,那么我会推荐使用模板匹配。如果它是恒定的,那么它可能会更精确一些,计算压力也更小。 – 2013-03-05 22:36:40

+0

模板的想法可能会缩小感兴趣的区域。不幸的是,现实生活中的问题不是基本的算法友好。我拥有的视频正在路上,我需要识别驾驶员所驾驶的每辆车。 – 2013-03-05 22:38:57

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)