# -*- coding: utf-8 -*- #将视频分给为一张一张的图片 __author__ = '上海色宁' import os import sys import cv2 import numpy as np import uuid import getopt def start_check_argv_and_split(argv): """ 通过 getopt模块 来识别参数demo, http://blog.csdn.net/ouyang_peng/ """ input_video = "" clip_rect = "" dest_dir = "" try: """ options, args = getopt.getopt(args, shortopts, longopts=[]) 参数args:一般是sys.argv[1:]。过滤掉sys.argv[0],它是执行脚本的名字,不算做命令行参数。 参数shortopts:短格式分析串。例如:"hp:i:",h后面没有冒号,表示后面不带参数;p和i后面带有冒号,表示后面带参数。 参数longopts:长格式分析串列表。例如:["help", "ip=", "port="],help后面没有等号,表示后面不带参数;ip和port后面带冒号,表示后面带参数。 返回值options是以元组为元素的列表,每个元组的形式为:(选项串, 附加参数),如:('-i', '192.168.0.1') 返回值args是个列表,其中的元素是那些不含'-'或'--'的参数。 """ opts, args = getopt.getopt(argv, "hi:c:d:", ["help", "input_video=", "clip_rect=","dest_dir="]) except getopt.GetoptError: print('Error: 0_split_video_into_image.py -i -c -d ') print(' or: 0_split_video_into_image.py --input_video= --clip_rect=<[175:235,275:420]> --dest_dir=') sys.exit(2) # 处理 返回值options是以元组为元素的列表。 if len(opts) != 3 : print('Error: Parameters not enough!') print('Usage: 0_split_video_into_image.py -i -c -d ') print(' or: 0_split_video_into_image.py --input_video= --clip_rect=<175:235,275:420> --dest_dir=') sys.exit() for opt, arg in opts: if opt in ("-h", "--h","-help","--help"): print('Usage: 0_split_video_into_image.py -i -c -d ') print(' or: 0_split_video_into_image.py --input_video= --clip_rect=<175:235,275:420> --dest_dir=') sys.exit() elif opt in ("-i", "--input_video"): input_video = arg elif opt in ("-c", "--clip_rect"): clip_rect = arg elif opt in ("-d", "--dest_dir"): dest_dir = arg print('input_video:', input_video) print('clip_rect:', clip_rect ) print(' . !!! we are assuming that this paramter is correct.') print('dest_dir:', dest_dir) if (not os.path.isfile(input_video)): print( input_video+ " is not exist!!!") sys.exit() if not os.path.exists(dest_dir): print( dest_dir+ " is not exist, we are going to creat it !!!") os.makedirs(dest_dir) # 打印 返回值args列表,即其中的元素是那些不含'-'或'--'的参数。 #for i in range(0, len(args)): # print('参数 %s 为:%s' % (i + 1, args[i])) split_into_image(input_video,clip_rect,dest_dir) def split_into_image(input_video,clip_rect,dest_dir): cap = cv2.VideoCapture(input_video) rows = clip_rect.split(',')[0] # 行 cols = clip_rect.split(',')[1] # 列 rows_start = int(rows.split(':')[0]) rows_end = int(rows.split(':')[1]) cols_start = int(cols.split(':')[0]) cols_end = int(cols.split(':')[1]) totol_cols = (cols_end-cols_start) col_length_1 = int(totol_cols*0.212352113) col_length_2 = int(totol_cols*0.212352113) col_length_3_4 = int(totol_cols*0.212352113) col_start_2 = cols_start+int(totol_cols*0.265690141) col_start_3 = cols_start+int(totol_cols*0.485746479) col_start_4 = cols_start+int(totol_cols*0.75943662) i = 0 while True: if i % 10 == 0: ret, frame = cap.read() #cv2.imshow("capture", frame[rows_start:rows_end,cols_start:cols_end]) cv2.imwrite(dest_dir+"/"+str(uuid.uuid4())+".jpg", frame[rows_start:rows_end,cols_start:cols_start+col_length_1]) cv2.imwrite(dest_dir+"/"+str(uuid.uuid4())+".jpg", frame[rows_start:rows_end,col_start_2:col_start_2+col_length_2]) cv2.imwrite(dest_dir+"/"+str(uuid.uuid4())+".jpg", frame[rows_start:rows_end,col_start_3:col_start_3+col_length_3_4]) cv2.imwrite(dest_dir+"/"+str(uuid.uuid4())+".jpg", frame[rows_start:rows_end,col_start_4:col_start_4+col_length_3_4]) if cv2.waitKey(1) & 0xFF == ord('q'): break i += 1 cap.release() cv2.destroyAllWindows() #程序入口 if __name__ == '__main__': start_check_argv_and_split(sys.argv[1:])