茨城エンジニアのPython開発日記

茨城のITベンチャー企業ではたらく2年目エンジニア。Pythonで色々なものを作成中。

aviを画像ファイル群に変換するツールを作ってみた


ブログから記事を見つけたい場合はこちら

ブログ地図 - 茨城エンジニアのPython開発日記

こんにちは松原です。
色々あって好きに使える時間ができたので、勉強などをしております。
で、作成したツールをとりあえず忘備録としてメモ。

機能はこんな感じ。

画像処理に使うツールは自分で作っておいた方がいいと思います。
既存のツールにやりたい画像処理があるかわからないし、ブラックボックスが少ないのは本当に大事。

大したものでもありませんが、ソースコードをあげておきます。

import cv2
import sys
import tkinter as tk
import numpy as np
from datetime import datetime as dt
import os

#参考にしたサイトhttps://rikoubou.hatenablog.com/entry/2019/01/15/174751

#グローバル変数として保持
avi_path_1 = "temp"

#ウィンドウ生成
root = tk.Tk()
root.title(u"avi合体")
root.geometry("550x130")

# テキストボックス
txt1 = tk.Entry(width=80)
txt1.place(x=20, y=10)

############################
#######コンバート実施関数#####
############################
def conv_avi_to_img():

    #aviパス取得
    avi_path = txt1.get()
    #直打ちするときはこっち。そのうちiniファイルとか用意して引継ぎしたい。
    #avi_path = "C:/Users/nasu/Desktop/local_wk/210918_3D/avi_to_img/Hosi3a.avi" 

    #ビデオキャプチャー取得
    video = cv2.VideoCapture(avi_path)

    #フレーム数取得
    frame_num = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

    #フレームレート取得(同じと想定)
    frame_rate = int(video.get(cv2.CAP_PROP_FPS))

    #タイムスタンプ取得
    tdatetime = dt.now()
    tstr = tdatetime.strftime('%Y%m%d_%H%M%S')

    #出力フォルダ作成
    result_dir_path = os.getcwd() + "/result_img/" + tstr
    print(result_dir_path)
    os.mkdir(result_dir_path)

    #フレームループ
    for frame_cnt in range(frame_num):
        
        avi_width = 500
        avi_height = 300
        img_size = (avi_width, avi_height)


        print(frame_cnt)

        if frame_cnt % 3 == 0:
            #画像初期化
            output_img = np.zeros((avi_width, avi_height, 3), np.uint8)
            
            #フレームの画像取得
            ret, output_img = video.read()

            ####### 画像処理するならここ #######

            ##################################

            #リサイズ
            output_img = cv2.resize(output_img, img_size)

            #画像保存
            cv2.imwrite(result_dir_path + "/" + str(frame_cnt) + '.jpeg', output_img)



    print("finish!!!!!!!!!!!!!!!")
################################
#######コンバート実施関数終了#####
################################

#書き込みボタンの作成
btn = tk.Button(text='画像へ変換', command = conv_avi_to_img)

btn.place(x=130, y=90) #ボタンを配置する位置の設定
root.mainloop()

こういうの、Git Hubにあげたほうがいいんだろうけどめんどくさい……
はいという訳で忘備録でした。