该项目已有详细讲解,详见https://blog.csdn.net/MNBVBM/article/details/108360138
在参考源码的过程中,我发现部分代码在自己的环境中并不能起到相应的作用,遂稍作修改;同时发现原文代码中一点瑕疵(至少在我这运行是有问题的)
一、计算时间差
原文作者调用timeutil.py文件的DtCalc()方法计算停车时间,但是我发现我的timentil模块中并没有该方法,于是在查阅资料后我采用datetime模块,具体代码如下:
longcar=cars[0][0]#cars为储存汽车信息的表格,cars[0]为第一列,cars[0][0]储存车牌号
cartime=cars[0][1]#cars[0][1]储存进入停车场时间
xtfont=pygame.font.SysFont('SimHei',15)
localtime = time.strftime('%Y-%m-%d %H:%M', time.localtime())
localtime = time.strptime(localtime,"%Y-%m-%d %H:%M")
cartime1 = time.strptime(cartime,"%Y-%m-%d %H:%M")
htime = (datetime.datetime(localtime[0],localtime[1],localtime[2],localtime[3]) - datetime.datetime(cartime1[0],cartime1[1],cartime1[2],cartime1[3]))
此时我发现,只能直接将htime转化为天数或秒数,于是我使用如下转化方法:
htime = (datetime.datetime(localtime[0],localtime[1],localtime[2],localtime[3]) - datetime.datetime(cartime1[0],cartime1[1],cartime1[2],cartime1[3])).seconds
htime = htime//3600
如此便能将停车时间转化为小时数
二、文字显示
项目要求能在窗体实时显示车位数、停车时间最长车辆等信息,我利用原文作者的框架后发现效果如下:
也就是会出现文字重叠现象。
出现问题的原因是我们在每次循环时都要重新绘制这些文字信息,但是原来的文字依然存在,于是就会一层层地叠加。那么如果我们每次循环对屏幕进行实例化时都让背景填充一边,那么就不会出现文字叠加的现象。但是这种方法应该很耗内存,毕竟原来的图层一直存在,不知道还有没有我不知道的方法可以更好地解决(毕竟刚用pygame,好多方法都不熟悉),希望有大佬能指点,感激不尽。
修改后的代码如下:
sucess, img = cam.read()
cv2.imwrite(cdir + '/file/test.jpg', img)
image = pygame.image.load(cdir + '/file/test.jpg')
image = pygame.transform.scale(image, (640, 480))
screen.fill((73, 119, 142))#增加了这个
screen.blit(image, (2, 2))
最终效果符合要求。