opencv车辆检测项目

e7a335a370074c89bf4bf405562d4e9a.png

第一步

 # 创建窗口

cv2.namedWindow("video", cv2.WINDOW_NORMAL)

cv2.resizeWindow("video", 960, 640)

# 打开视频摄像头

cap = cv2.VideoCapture("video.mp4")

第二步

# 去背景

background =cv2.bgsegm.createBackgroundSubtractorMOG

# 形态学 获取一个kernel

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

第三步

 # 灰度处理

 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

 # 高斯滤波

gauss = cv2.GaussianBlur(gray, (5, 5), sigmaX=5)

 # 去背景

 black = background.apply(gauss)

# 腐蚀, 去掉图中小斑块

 erode = cv2.erode(black, kernel)

# 膨胀, 还原放大

dilate = cv2.dilate(erode, kernel, iterations=3)

# 闭运算 先膨胀 后腐蚀 去除图像里面的胡椒噪音

close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)

第四步

 # 查找轮廓

counts, h = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

效果图

696bc59d313b45639c2133c2bf27b6c1.jpg

 全部代码

import cv2

import numpy as np

# 线高

line_high = 550

# 统计车辆

car_count = 0

# # 创建窗口

cv2.namedWindow("video", cv2.WINDOW_NORMAL)

cv2.resizeWindow("video", 960, 640)

# 打开视频摄像头

cap = cv2.VideoCapture("video.mp4")

# 去背景

background = cv2.bgsegm.createBackgroundSubtractorMOG()

# 形态学 kernel

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))

# 判断摄像头是否打开

while cap.isOpened():

    # 读取视频的每一帧 返回ret True

    ret, frame = cap.read()

    if ret is True:

        # 灰度处理

        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 高斯滤波

        gauss = cv2.GaussianBlur(gray, (5, 5), sigmaX=5)

        # 中值滤波

        # medium = cv2.medianBlur(gauss, 5)

        # 去背景

        black = background.apply(gauss)

        # 腐蚀, 去掉图中小斑块

        erode = cv2.erode(black, kernel)

        # 膨胀, 还原放大

        dilate = cv2.dilate(erode, kernel, iterations=3)

        # 开运算 先腐蚀 后膨胀 去除图像表面的胡椒噪音

        # open = cv2.morphologyEx(black, cv2.MORPH_OPEN, kernel)

        # 闭运算 先膨胀 后腐蚀 去除图像里面的胡椒噪音

        close = cv2.morphologyEx(dilate, cv2.MORPH_CLOSE, kernel)

        # close = cv2.morphologyEx(open, cv2.MORPH_CLOSE, kernel)

        # 查找轮廓

        counts, h = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

        # 画线

        cv2.line(frame, (20, line_high), (1400, line_high), (0, 0, 255), 5, 16)

        # 绘制轮廓

        for (i, c) in enumerate(counts): # c == counts[]

            x, y, w, h = cv2.boundingRect(c) # 提取最大矩形的四个参数

            print(w, h)

            if w > 90 and h > 87:

                cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 255), 2) # 画出矩形轮廓

                center_y = y + int(h/2) # 求矩形中心点y

                print(center_y)

                if line_high - 7 < center_y < line_high + 7:

                    car_count += 1

                    cv2.putText(frame, "count"+str(car_count), (500, 380), cv2.FONT_HERSHEY_COMPLEX, 2, (255, 255, 0))

            else:

                continue

       cv2.putText(frame, "count" + str(car_count), (500, 380), cv2.FONT_HERSHEY_COMPLEX, 2, (255, 255, 0))

        cv2.imshow("video", frame)

        key = cv2.waitKey(10)

        if key & 0xff == ord("q"):

            exit()

    else:

        exit()

cap.release()

cv2.destroyAllWindows()

视频效果链接参考【opencv车辆检测-哔哩哔哩】 https://b23.tv/xnIWFim

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值