前提・実現したいこと
画像処理について独学で学んでいるのですが
動画をコマ割り・二値化 → 黒の領域が大きい写真を探す → 見つかった画像より前の画像を削除 → 最大画像を0として番号を振りなおす
という処理を行いたいと考えています。
発生している問題・エラーメッセージ
調べながら何とか完成させたのですがプログラムが悪いのか
処理に時間がかかりすぎます
大体5000ファイル処理したいのですが10分ほどかかってしまいます
該当のソースコード
python
1import os 2import cv2 3import numpy as np 4import glob 5from PIL import Image 6import os 7 8 9file_list = glob.glob('//image_dir//*jpg') 10 11for file in file_list: 12 os.remove(file) 13 14 15#動画コマワリ 16movie_name='s' 17movie='//directory//1_.avi' 18 19cap=cv2.VideoCapture(movie) 20count=0 21while True: 22 ret,frame=cap.read() 23 if ret==True: 24 count += 1 25 cv2.imwrite('//image_dir//' + movie_name+'_' + str("{0:05d}".format(count)) + '.jpg',frame) 26 else: 27 break 28 29#最大画像を取得 30for j in range(1,5000): 31 filename='//image_dir//s_%05d.jpg'%(j) 32 im = np.array(Image.open(filename).convert('L')) 33 34#閾値 35 im_ = (im > 180) * 255 36 c=0 37#最大画像を探索 38 max1=0 39 for i in range(2048): 40 if im_[1,i]==0: 41 c=c+1 42 if max1<c: 43 max1=c 44 d=j 45 c=0 46print(d) 47 48#不要画像の削除 49for l in range(1,d): 50 os.remove('//image_dir//s_%05d.jpg'%(l)) 51 52a=0 53directory='//image_dir//' 54files=os.listdir(directory) 55for file in files: 56 path = os.path.join(directory,file) #パス 57 name = str('%06d')%(a)+'.jpg' 58 target = os.path.join(directory,name) 59 os.rename(path,target) 60 a = a + 1
コマ割で時間がかかってしまうのは分かるのですが、もう少し短縮したいです。
ご教授お願い致します。
追記
import os import cv2 import numpy as np import glob from PIL import Image import os import sys import re file_list = glob.glob('//image_dir//*jpg') for file in file_list: os.remove(file) #動画コマワリ movie_name='s' movie='//11.avi' cap=cv2.VideoCapture(movie) count=0 max1=0 c=0 while True: ret,frame=cap.read() if ret==True: cv2.imwrite('//image_dir//' + movie_name+'_' + str("{0:05d}".format(count)) + '.jpg',frame) #二値化 filename='//image_dir//s_%05d.jpg'%(count) im = np.array(Image.open(filename).convert('L')) im_ = (im > 180) * 255 #最大画像を探索 for i in range(2048): if im_[100,i]==0: c=c+1 if max1<c: max1=c c=0 pil_img = Image.fromarray(im) pil_img.save('//image_dir//s_00000.jpg') count=1 else: count += 1 else: break

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/23 07:18