cv2 文字视频转图片
1.代码
#coding=utf-8
import os
import cv2
import numpy as np
def main(video_input_path="./video",video_output_path="./image",limit=1):
videos = os.listdir(video_input_path)
f = 0
for video in videos:
cap = cv2.VideoCapture(os.path.join(video_input_path,video))
(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.')
if int(major_ver) < 3:
fps = cap.get(cv2.cv.CV_CAP_PROP_FPS)
else:
fps = int(cap.get(cv2.CAP_PROP_FPS))
print("视频帧数", fps)
last_frame = None
n = 0
while True:
ret, frame = cap.read()
if frame is None:
break
if last_frame is not None and diffImage(frame,last_frame) > limit:
path = os.path.join(video_output_path,str(f))
if not os.path.exists(path):
os.makedirs(path)
print(os.path.join(path,f"{n}.jpg"))
cv2.imwrite(os.path.join(path,f"{n}.jpg"),last_frame)
n+=1
last_frame = frame
f += 1
print(videos)
pass
def distMap(frame1, frame2):
"""outputs pythagorean distance between two frames"""
frame1_32 = np.float32(frame1)
frame2_32 = np.float32(frame2)
diff32 = frame1_32 - frame2_32
norm32 = np.sqrt(diff32[:,:,0]**2 + diff32[:,:,1]**2 + \
diff32[:,:,2]**2)/np.sqrt(255**2 + 255**2 + 255**2)
dist = np.uint8(norm32*255)
return dist
def diffImage(img1, img2):
m = distMap(img1, img2)
_, m2 = cv2.meanStdDev(m)
j = round(m2[0][0], 0)
if j > 0:
print(j)
return j
if __name__ == '__main__':
main()