Python3使用OpenCV和hyperlpr实现视频帧截图并进行图像去重和车牌识别。
(1)其中有获取每一帧视频并保存为图片的代码
(2)可以去除重复相似的图片
(3)通过hyperlpr实现车牌识别,全部代码如下:
import cv2
import os
from skimage.metrics import structural_similarity as compare_ssim
from hyperlpr import *
image_base_path = "G:\\videos\\";
def get_images(video_path):
frame_times = -1;
fileName = video_path.split("\\")[-1:][0].split('.')[0]
image_out_path = image_base_path + fileName
if not os.path.exists(image_out_path):
os.makedirs(image_out_path)
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
frame_times = frame_times + 1
success, frame = cap.read()
if not success:
break;
if(frame_times%45==0):
cv2.imencode('.jpg', frame)[1].tofile(image_out_path + "\\" + str(frame_times) + ".jpg")
def delete(filename1):#删除不想要的图片
os.remove(filename1)
if __name__ == '__main__':
get_images("G:\\videos\\wvax_2.mp4")
dir_path = "G:\\videos\\wvax_2\\"
image_path=[]
image_files=os.listdir(dir_path)
#image_files.sort(key=lambda x:int(x.split('.')[1]))#用于进行文件排序,可以根据自己的文件命名来更改代码
print(image_files)
for image_file in image_files:
image_path.append(os.path.join(dir_path,image_file))
print(image_path)
image_0 = cv2.imread(image_path[0])
image_0_simp=image_0[:,:,0]
print(image_0_simp.sum())
for image in image_path[1:]:
image_1=cv2.imread(image)
image_1_simp=image_1[:,:,0]
# cv2.imshow("111",image_1_simp)
# cv2.waitKey(0)
ssim = compare_ssim(image_0_simp, image_1_simp, multichannel=True)
print(ssim)
if ssim>0.45:
delete(image)
else:
image_0 = cv2.imread(image)
image_0_simp = image_0[:, :, 0]
image_path=[]
image_files=os.listdir(dir_path)
#image_files.sort(key=lambda x:int(x.split('.')[1]))#用于进行文件排序,可以根据自己的文件命名来更改代码
print(image_files)
for image_file in image_files:
image_path.append(os.path.join(dir_path,image_file))
print(image_path)
image_0 = cv2.imread(image_path[0])
image_0_simp=image_0[:,:,0]
print(image_0_simp.sum())
for image in image_path[1:]:
image_1=cv2.imread(image)
print(HyperLPR_plate_recognition(image_1))
视频文件:
视频自动截图保存的图片文件:
最终效果(图片做了处理,不展示完整的车牌号码):