描述:将一个视频流按帧数截取大量的图片
用途:AI的数据集制作,得到大量的图片,之后将其打标签
更改的地方
1.default--间隔的帧数 2.input/output--输入视频的路径、存放截取图片的路径 (将路径放入后面的‘ ’中即可)前面加r可表示绝对路径 eg:
1
args = parser.parse_args([
'
--input
'
,r
'
F:\data_video\IMG_4395.MOV
'
,
'
--output
'
,r
'
F:data_rgb_pic\7video
'
])
直接上代码
1
import
cv2
2
import
argparse
3
import
os
4
def
parse_args():
5
"""
6
Parse input arguments
7
"""
8
parser = argparse.ArgumentParser(description=
'
Process pic
'
)
9
parser.add_argument(
'
--input
'
, help=
'
video to process
'
, dest=
'
input
'
, default=None, type=
str)
10
parser.add_argument(
'
--output
'
, help=
'
pic to store
'
, dest=
'
output
'
, default=None, type=
str)
11
#
default为间隔多少帧截取一张图片
12
parser.add_argument(
'
--skip_frame
'
, dest=
'
skip_frame
'
, help=
'
skip number of video
'
, default=100, type=
int)
13
#
input为输入视频的路径 ,output为输出存放图片的路径
14
args = parser.parse_args([
'
--input
'
,
''
,
'
--output
'
,
''
])
15
return
args
16
17
def
process_video(i_video, o_video, num):
18
cap =
cv2.VideoCapture(i_video)
19
num_frame =
cap.get(cv2.CAP_PROP_FRAME_COUNT)
20
expand_name =
'
.jpg
'
21
if
not
cap.isOpened():
22
print
(
"
Please check the path.
"
)
23
cnt =
0
24
count =
0
25
while
1
:
26
ret, frame =
cap.read()
27
cnt += 1
28
#
how
29
#
many
30
#
frame
31
#
to
32
#
cut
33
if
cnt % num ==
0:
34
count += 1
35
cv2.imwrite(os.path.join(o_video, str(count) +
expand_name), frame)
36
37
if
not
ret:
38
break
39
40
if
__name__
==
'
__main__
'
:
41
args =
parse_args()
42
if
not
os.path.exists(args.output):
43
os.makedirs(args.output)
44
print
(
'
Called with args:
'
)
45
print
(args)
46
process_video(args.input, args.output, args.skip_frame)
参考
https://blog.csdn.net/qq_36190978/article/details/85284484

