Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 1dbc947

Browse files
committed
图片变文件 视频提取图片
1 parent 6c8212b commit 1dbc947

File tree

4 files changed

+99
-0
lines changed

4 files changed

+99
-0
lines changed
Loading
Binary file not shown.

视频截取图片/图片变脚本.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# @Time : 2020/5/28 14:25
2+
# @Author : Libuda
3+
# @FileName: 图片变脚本.py
4+
# @Software: PyCharm
5+
# -*- coding: utf-8 -*-
6+
"""以python模块形式存储、使用二进制文件"""
7+
import os
8+
import base64
9+
from io import BytesIO
10+
11+
12+
def bin2module(bin_file, py_file=None):
13+
"""二进制文件转存为python模块
14+
bin_file - 二进制文件名
15+
py_file - 生成的模块文件名,默认使用二进制文件名,仅更改后缀名
16+
"""
17+
fpath, fname = os.path.split(bin_file)
18+
fn, ext = os.path.splitext(fname)
19+
if not py_file:
20+
py_file = os.path.join(fpath, '%s.py' % fn)
21+
with open(bin_file, 'rb') as fp:
22+
content = fp.read()
23+
content = base64.b64encode(content)
24+
content = content.decode('utf8')
25+
with open(py_file, 'w') as fp:
26+
fp.write('content = """%s"""\n\n' % content)
27+
28+
29+
if __name__ == '__main__':
30+
"""测试代码"""
31+
# 将图像文件转存为img_demo.py
32+
bin2module('0_51_Dresses_wearingdress_51_377_0.png', 'demo.py')
33+
# 导入刚刚生成的demo模块
34+
import demo
35+
# 用pillow打开图像,验证demo模块的get_fp():返回二进制的IO对象(类文件对象)
36+
from PIL import Image
37+
38+
im = Image.open(demo.get_fp())
39+
im.show()
40+
# 保存为本地文件,验证demo模块的save():保存文件
41+
demo.save('demo_save.png')
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# @Time : 2020/5/28 14:20
2+
# @Author : Libuda
3+
# @FileName: 视频变图片帧.py
4+
# @Software: PyCharm
5+
6+
import argparse
7+
import os
8+
9+
import cv2
10+
11+
12+
def parse_args():
13+
"""
14+
Parse input arguments
15+
"""
16+
parser = argparse.ArgumentParser(description='Process pic')
17+
parser.add_argument('--input', help='video to process', dest='input',
18+
default="38f98723f3525f0518537c1d36677cf1.mp4", type=str)
19+
parser.add_argument('--output', help='pic to store', dest='output', default="./imgs", type=str)
20+
# default为间隔多少帧截取一张图片
21+
parser.add_argument('--skip_frame', dest='skip_frame', help='skip number of video', default=1,
22+
type=int) # 此处可更改提取帧的间隔
23+
args = parser.parse_args() # 此处添加路径,input为输入视频的路径 ,output为输出存放图片的路径
24+
return args
25+
26+
27+
def process_video(i_video, o_video, num):
28+
cap = cv2.VideoCapture(i_video)
29+
num_frame = cap.get(cv2.CAP_PROP_FRAME_COUNT)
30+
expand_name = '.png'
31+
if not cap.isOpened():
32+
print("Please check the path.")
33+
cnt = 0
34+
count = 0
35+
while 1:
36+
ret, frame = cap.read()
37+
cnt += 1
38+
# how
39+
# many
40+
# frame
41+
# to
42+
# cut
43+
if cnt % num == 0:
44+
count += 1
45+
print(frame)
46+
frame = cv2.resize(frame, (128, 128))
47+
cv2.imwrite(os.path.join(o_video, "shimei" + str(count) + expand_name), frame)
48+
if not ret:
49+
break
50+
51+
52+
if __name__ == '__main__':
53+
args = parse_args()
54+
if not os.path.exists(args.output):
55+
os.makedirs(args.output)
56+
print('Called with args:')
57+
print(args)
58+
process_video(args.input, args.output, args.skip_frame)

0 commit comments

Comments
 (0)