使用Python-OpenCV进行水平和垂直边缘剖面

3

我正在尝试在图像中检测车辆(实际上是视频中的一系列帧)。我对opencv和Python都很新,并且在Windows 7下工作。

有没有一种方法可以获取图像的水平边缘和垂直边缘,然后将结果图像相加到各自的向量中?

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

我查看了这个这个,但并不知道该如何操作。 您可以使用以下图像进行说明。

编辑

我受到了以下论文提出的想法的启发(如果您没有访问权限,请见谅)。

Betke,M。; Haritaoglu,E。和Davis,LS实时多车辆检测和跟踪从移动车辆机器视觉和应用程序,Springer-Verlag,2000年,12,69-83

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

3个回答

1
我会看一下opencv的squares示例,在这里发布。它使用Canny然后进行轮廓查找以返回每个正方形的边缘。您应该能够修改此代码以获取您要查找的水平和垂直线条。这里是Python调用Canny的文档链接。对于全面的边缘检测非常有帮助。大约一个小时后,我可以回家给您提供一个可工作的示例。

谢谢。我提供的图像(正方形)仅用于说明目的,因为我没有一张免费的车辆在路上的图像。 - Stat-R
如果你碰巧知道车辆的后部长什么样子,并且可以假设它保持相对恒定,那么我建议使用模板匹配。在这种情况下,它可能会更准确,计算上也会更轻松一些。 - a sandwhich
模板的想法可能会缩小感兴趣的区域。不幸的是,现实生活中的问题并不适合基本算法。我拍摄的视频在路上,我需要识别司机所包含的每辆车。 - Stat-R
1
可以理解。我大约一年前写了一个用C语言编写的程序,可以从仪表盘摄像头中检测车牌。虽然这不是我最终确定的方案,但模板匹配在那种情况下实际上效果还不错。需要注意的一点是,对于许多汽车来说,它们上面可能被检测到的线条并不总是水平和垂直的。您可能需要扩展您的系统以包括某些线条的模式,例如圆形梯形(挡风玻璃)。 - a sandwhich
抱歉让您久等了,我比预期更忙。我想我找到了那篇文章,读完后我会贴上样例。 - a sandwhich

1

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接