标蓝部分的代码的上一行,最右边少了一个右括号,所以系统认为标蓝的这一行也是未写完的代码,所以报错。
1)、cv2.resize():第一个参数表示画面信息,第二个参数limitSize表示要对画面进行的缩放大小,其格式应该为(width,height),即像素的列和行
2)、视频帧率的获取:利用以下代码得到,cap.get()的参见参数参考文章——OpenCV VideoCapture.get()参数详解
cap = cv2.VideoCapture(filepath)
self.FPS=cap.get(cv2.CAP_PROP_FPS)
3)、在将视频处理为字符串的表示之后,要再将字符串写为图片保存,由于所用的字符有不同的长度,因此直接整段写入的话会有图片混乱的问题,因此用max_width()函数统一字符在图片上的表示长度,在写入图片时,按照像素点进行处理。即代码的str2fig()的三个for循环片段。因此在生成画面时比较慢。
4)、os.listdir()函数用来读取保存的图片,由于其返回的可能是乱序的,因此要对其中的内容进行排序。比如,本次处理的视频共有1400余帧,用os.listdir()读取后返回的文件名列表大概如下:
['pic_0.jpg', 'pic_1.jpg', 'pic_10.jpg', 'pic_100.jpg', 'pic_1000.jpg', 'pic_1001.jpg', 'pic_1002.jpg', 'pic_1003.jpg', 'pic_1004.jpg', 'pic_1005.jpg', 'pic_1006.jpg', 'pic_1007.jpg', 'pic_1008.jpg', ....'pic_999.jpg']
直接读取图片生成视频会有明显的视频时间线不同步问题,利用re模块处理所读到的文件名,提取其中的数字,利用sort函数进行排序,得到有序的文件名列表,其中re.findall()函数返回值为一个列表,需要提取其中的内容,并用int()转为数字。
5)、cv2.imread()函数要求输入文件的完整路径,否则无法读取图片,遇到视频生成失败时,检查frame是否为None,是的话可能是文件名输入出错等情况导致