在本文中,我们将了解如何使用Python OpenCV通过图像文件、网络摄像头或视频文件进行车辆检测。
首先,您需要安装OpenCV。我们将使用完整的Python编程语言完成本教程,所以让我们开始吧。
OpenCV Python
OpenCV是一个图像处理库。它是为解决计算机视觉问题而设计的。OpenCV是在Python中扩展的C/C++库。
要安装OpenCV,请单击此处。Here
NumPy
NumPy库用于支持Python编程语言中的多维数组、矩阵等。它是一个开源的数值Python库。
Numpy提供:
要安装Numpy,请访问此处。visit here.
现在创建一个文件,如VehicleDetection.py
import cv2
cv2.VideoCapture(VIDEO_PATH)
如果使用视频文件作为源,请执行以下操作
cap=cv2.VideoCapture(‘/home/python/OpenCV/vehiclesDetection/vehicles.mp4’)
如果使用网络摄像头作为信号源,那么。执行以下操作
cap = cv2.VideoCapture(0) #depends on your system 0, -1 or 1
如果视频捕获已经初始化,并且上一次调用VideoCapture构造函数或VideoCapture::Open()成功,则VideoCapture.isOpned()函数返回TRUE,则该方法返回TRUE。
VideoCapture.read()函数返回视频帧。如果没有抓取任何帧,则图像将为空。
if cap.isOpened():
定义一些变量:
min_contour_width = 40
创建函数
def get_centrolid(x, y, w, h):
set()函数在VideoCapture中设置属性集(proId,value)。cv::VideoCaptureProperties(例如,cv::CAP_PROP_POS_MSEC,cv::CAP_PROP_POS_FRAMES,…)返回true。
cap.set(3, 1920)
cv2.disdiff()函数
返回值(MSubArray|D|mvoid|Complex 64|float16|uint32|MaskedConstant|int16|ndarray|int64|int32|memmap|number|bool_|timedelta64|float128|int8|Matrix|uint8|整数|datetime64|MaskedArray|recarray|uint64|float64)
#absdiff(src1, src2)
d =cv2.absdiff(frame1, frame2)
cv2.cvtColor(src,code[,dst[,dstCn]])将图像从一种颜色空间转换为另一种颜色空间。该函数将输入图像从一种颜色空间转换到另一种颜色空间。在转换到RGB颜色空间/从RGB颜色空间转换的情况下,应明确指定通道的顺序(RGB或BGR)。请注意,OpenCV中的默认颜色格式通常称为RGB,但它实际上是BGR(字节颠倒)。
grey = cv2.cvtColor(d, cv2.COLOR_BGR2GRAY)
此函数接受DILATE(src,kernel[,dst[,锚[,iterations[,borderType[,borderValue])
使用特定的结构元素放大图像。该函数使用确定像素邻域形状的指定结构元素来展开源图像。
dilated = cv2.dilate(th, np.ones((3, 3)))
Threshold(src,Thresh,maxval,type[,dst])对每个数组元素应用固定级别的阈值。该函数将固定级别阈值应用于多通道阵列。该函数通常用于从灰度图像中获取二值(二进制)图像或用于消除噪声,即过滤掉值过小或过大的像素。该函数支持多种类型的阈值。它们由类型参数确定。
ret, th = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
cv2.GaussianBlur()函数
GaussianBlur(src,ksize,sigmaX[,dst[,sigmaY[,borderType])
使用高斯过滤模糊图像。函数用于将源图像与指定的高斯核进行卷积。支持就地过滤。
SRC输入图像:图像可以有任意数量的通道,这些通道被处理。
blur = cv2.GaussianBlur(grey, (5, 5), 0)
getStructuringElement(Shape,ksize[,锚])返回用于形态操作的指定大小和形状的结构元素。该函数构造并返回结构化元素,该元素可以进一步传递给#erode、#diplate或#formologyEx。但是您也可以自己构造一个任意的二进制掩码,并将其用作结构化元素。可以是#MorphShape之一的Shape元素Shape
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
formologyEx(src,op,kernel[,dst[,锚[,iterations[,borderType[,borderValue])执行高级形态变换。
函数cv2.formologyEx可以使用侵蚀和膨胀作为基本操作来执行高级形态转换。
任何操作都可以就地进行。在多通道图像的情况下,每个通道被独立处理。
closing = cv2.morphologyEx(dilated, cv2.MORPH_CLOSE, kernel)
cv2.findContours()函数
findContours(image,mode,method[,contours[,Hierarchy[,Offset]])->Contours,Hierarchy。它在二值图像中查找轮廓。
该函数使用算法从二值图像中检索轮廓。轮廓是形状分析和目标检测与识别的有用工具。
Chain_Approx_Simple([x])
将数字或字符串转换为整数,如果没有给定参数,则返回0。如果x是一个数字,则返回x.__int__()。对于浮点数,这将向零截断。
contours, h = cv2.findContours(closing, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
计算灰度级图像的点集或非零像素的右上边框。此函数计算并返回指定点集或灰度图像的非零像素的最小右上边界矩形。
cv2.putText(img, text, org, fontFace, fontScale, color[ , thickness[ , lineType[, bottomLeftOrigin]]])
下面说明的属性
我们把它们放在一起吧。
show image cv2.imshow()函数。
cv2.imshow("Vehicle Detection", frame1)
完整源代码:
输出
这张照片是从一个视频文件中拍摄的。
更多内容请访问Playenglish.ioplainenglish.io
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/20/%e8%bd%a6%e8%be%86%e6%a3%80%e6%b5%8b%e5%92%8c%e8%ae%a1%e6%95%b0%e9%a1%b9%e7%9b%ae%e2%80%8a-%e2%80%8aopencv-python/