「画像処理の謎を探る:PythonとOpenCVによる画像・動画処理」

 1. 写真をアップロードし、背景を削除してダウンロードします。オンラインマットソフト_写真背景除去 | Remove.bg – Remove.bg

2. ダウンロードした画像を2倍に拡大します。ClipDrop - 画像アップスケーラー

 3. ダウンロードした写真を拡大して編集します。

 4. deepfacelive を使用して顔を変更します。

1) 手順 3 の写真を指定したフォルダーにコピーします。C:\myApp\deepfakelivetemp\DeepFaceLive_NVIDIA\userdata\animatables

2) Deepfacelive ソフトウェアを次のように設定します。

  

3) 自動生成された jpg ファイルをビデオ ファイルに変換する Python プログラムを作成します。

a) cv2 モジュールをインストールします。

pip install opencv-python

 b) ソースコードの記述:

import os
import wx
import cv2

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, title=title, size=(300, 200))

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.btn = wx.Button(panel, label='选择文件夹')
        self.btn.Bind(wx.EVT_BUTTON, self.onOpenFolder)
        vbox.Add(self.btn, flag=wx.ALIGN_CENTER|wx.TOP|wx.BOTTOM, border=20)

        panel.SetSizer(vbox)

        self.Show(True)

    def onOpenFolder(self, event):
        dlg = wx.DirDialog(self, '选择文件夹', style=wx.DD_DEFAULT_STYLE)

        if dlg.ShowModal() == wx.ID_OK:
            folder_path = dlg.GetPath()
            print('您选择的文件夹是:{}'.format(folder_path))
            self.createVideo(folder_path)

        dlg.Destroy()

    def createVideo(self, folder_path):
        # 获取文件夹中的所有JPG序列文件
        file_list = os.listdir(folder_path)
        file_list.sort()
        jpg_list = [os.path.join(folder_path, f) for f in file_list if f.endswith('.jpg')]

        # 读取第一张JPG文件获取视频尺寸
        img = cv2.imread(jpg_list[0])
        height, width, _ = img.shape

        # 初始化视频写入器
        video_path = os.path.join(folder_path, 'output.mp4')
        fourcc = cv2.VideoWriter_fourcc(*'mp4v')
        out = cv2.VideoWriter(video_path, fourcc, 30, (width, height))

        # 逐帧读取JPG文件并写入视频
        for jpg_file in jpg_list:
            img = cv2.imread(jpg_file)
            out.write(img)

        out.release()

        print('视频文件已生成:{}'.format(video_path))

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame(None, 'JPG序列文件合成视频')
    app.MainLoop()

c) コードの説明:

以下は、「Python を使用して wxPython モジュールを作成する: フォルダーを選択し、001.jpg から 304.jpg までの JPG シーケンス ファイルをビデオ ファイルに結合する」の Python コードの説明です。

まず、os、wx、cv2 モジュールなどの必要なモジュールをインポートしました。os モジュールはファイルとフォルダーの処理に使用され、wx モジュールは GUI アプリケーションの作成に使用され、cv2 モジュールは画像ファイルとビデオ ファイルの読み取りと書き込みに使用されます。

ここでは、「MyFrame」という wxPython フレーム クラスを定義し、その中に 2 つのメソッド __init__ と onOpenFolder を実装します。__init__ メソッドは GUI フレームとボタンの初期化に使用され、onOpenFolder メソッドはフォルダー選択ボタンがクリックされたイベントの処理に使用されます。JPG シーケンス ファイルをビデオ ファイルに結合するための「createVideo」と呼ばれるメソッドも定義します。

最後に、メイン プログラムで wxPython アプリケーションのインスタンスを作成し、「MyFrame」という名前のフレームのインスタンスを作成します。ユーザーがウィンドウを閉じるまでアプリケーションが実行できるように、アプリケーションのメイン ループを最後の行に配置します。

要約すると、この Python プログラムは、wxPython モジュールを使用して、ユーザーが JPG シーケンス ファイルを含むフォルダーを選択し、それらを 1 つのビデオ ファイルに結合できるようにする GUI アプリケーションを作成します。OpenCV ライブラリを使用して、画像ファイルとビデオ ファイルの読み取りと書き込みを行います。

d) 結果:

おすすめ

転載: blog.csdn.net/winniezhang/article/details/131744536