本人尝试在视频截取红绿灯的图像,奈何技术不过关,在roi(感兴趣区域上)截取不过关。只能采取截取全屏的方法进行识别。下面是我的方法
导入所需的库
载入视频
获取指定的区域
图像转为HSV颜色空间
定义红绿值的范围
找取红绿区域的轮廓
首先我们需要导入cv2和numpy两个库,
随后载入视频,以cap为变量名,然后我的视频路径是写为在python文件中有个子文件命名为video。
import cv2
import numpy as np
# 加载视频
cap = cv2.VideoCapture('video/acc.mp4')
然后我们开始让电脑读取视频每一帧,当视频无法读取时直接退出。
while True:
# 读取一帧
ret, frame = cap.read()
if ret == False:
break
然后在视频中获取指定的图像,因为在后来在指定区域无法正确截取感兴趣区域,所以我直接获取整个屏幕,之后再截取roi区域,并进行hsv转换。
frame = cv2.resize(frame, (1920, 1200))
# 截取roi区域
roiColor = frame[100:300, 300:800]
# 转换hsv颜色空间
hsv = cv2.cvtColor(roiColor, cv2.COLOR_BGR2HSV)
后面分别定义红绿值的范围,并计算出现红绿图像的面积,达到一定的面积就认定为是红绿灯图像
综上可看到,我的代码还不够完整,也有很多谬误,馨如自己无法指定roi区域截取,然后没办法更好识别红绿灯的轮廓,只能计算到达一定面积认定为红绿灯而不是圆形的轮廓进行识别,再者识别为绿灯时,不能再指定的方框内,这是我的不足,希望大家看到我的文章说一下见解,给我意见啦。respect!🌹