项目简介
这是一个经典的计算机视觉项目,适合初学者入门和毕业设计。
1. 安装依赖库
pip install opencv-python numpy
如果你使用的是 Anaconda 或已预装环境,可跳过此步。
2. 主程序代码 main.py
import cv2
import numpy as np
import time
# ==================== 配置区 ====================
# 1. 视频源路径(可以是摄像头、视频文件或图片)
VIDEO_SOURCE = 0 # 0 表示默认摄像头;也可填 "video.mp4" 或 "image.jpg"
# 2. 停车位坐标列表 [x1, y1, x2, y2] —— 需要根据你的实际画面手动标定!
PARKING_SPACES = [
[7689, 0, 8489, 150], # 车位 1
[8489, 0, 9289, 150], # 车位 2
[9289, 0, 10089, 150], # 车位 3
[10089, 0, 10889, 150],# 车位 4
[10889, 0, 11689, 150],# 车位 5
[11689, 0, 12489, 150],# 车位 6
[7554, 150, 8354, 300],# 车位 7
[8354, 150, 9154, 300],
[, , , ],
[, , , ],
[, , , ],
[, , , ]
]
SPACE_LABELS = [, , , , , , , , , , , ]
COLOR_OCCUPIED = (, , )
COLOR_FREE = (, , )
COLOR_TEXT = (, , )
FONT = cv2.FONT_HERSHEY_SIMPLEX
FONT_SCALE =
THICKNESS =
():
x1, y1, x2, y2 = space_coords
roi = frame[y1:y2, x1:x2]
roi.size == :
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
avg_brightness = np.mean(gray_roi)
THRESHOLD_BRIGHTNESS =
is_occupied = avg_brightness < THRESHOLD_BRIGHTNESS
is_occupied
():
free_count =
i, (space, label, status) ((spaces, labels, statuses)):
x1, y1, x2, y2 = space
color = COLOR_OCCUPIED status COLOR_FREE
status:
free_count +=
cv2.rectangle(frame, (x1, y1), (x2, y2), color, THICKNESS)
cv2.putText(frame, label, (x1, y1 - ), FONT, FONT_SCALE, COLOR_TEXT, THICKNESS)
cv2.putText(frame, , (, ), FONT, , (, , ), )
frame, free_count
():
()
()
cap = cv2.VideoCapture(VIDEO_SOURCE)
cap.isOpened():
()
cv2.namedWindow(, cv2.WINDOW_NORMAL)
:
ret, frame = cap.read()
ret:
statuses = []
space PARKING_SPACES:
status = get_parking_status(frame, space)
statuses.append(status)
result_frame, free_count = draw_parking_info(frame.copy(), PARKING_SPACES, SPACE_LABELS, statuses)
cv2.imshow(, result_frame)
cv2.waitKey() & == ():
cap.release()
cv2.destroyAllWindows()
()
__name__ == :
main()


