📜  Escala, Translação e Rotação em Vídeos - Python (1)

📅  最后修改于: 2023-12-03 14:41:01.212000             🧑  作者: Mango

Escala, Translação e Rotação em Vídeos - Python

Neste tutorial, vamos explorar como realizar operações de escala, translação e rotação em vídeos usando Python. Vamos usar a biblioteca OpenCV para manipulação de imagens e vídeos.

Antes de começarmos, certifique-se de ter o OpenCV instalado em seu ambiente Python. Você pode instalá-lo usando o seguinte comando:

pip install opencv-python

Vamos começar importando as bibliotecas necessárias:

import cv2
import numpy as np
Escala de um vídeo

Para redimensionar um vídeo em Python, usamos a função cv2.resize(). Ele aceita a imagem original e o tamanho de destino como parâmetros e retorna a imagem redimensionada.

def escala(video, escala):
    cap = cv2.VideoCapture(video)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    escala_width = int(width * escala)
    escala_height = int(height * escala)

    out = cv2.VideoWriter('video_escalado.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 25, (escala_width, escala_height))

    while(cap.isOpened()):
        ret, frame = cap.read()

        if ret == True:
            resized_frame = cv2.resize(frame, (escala_width, escala_height))
            out.write(resized_frame)

            cv2.imshow('Escala', resized_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

Neste exemplo, video é o caminho para o vídeo de entrada e escala é o fator de escala desejado.

Translação de um vídeo

A translação de um vídeo refere-se a mover o vídeo para uma determinada direção. Para realizar a translação, usamos a função cv2.warpAffine(). Esta função aceita a imagem original, a matriz de transformação e o tamanho de destino como parâmetros e retorna a imagem transformada.

def translacao(video, dx, dy):
    cap = cv2.VideoCapture(video)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    out = cv2.VideoWriter('video_transladado.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 25, (width, height))

    while(cap.isOpened()):
        ret, frame = cap.read()

        if ret == True:
            M = np.float32([[1, 0, dx], [0, 1, dy]])
            translated_frame = cv2.warpAffine(frame, M, (width, height))
            out.write(translated_frame)

            cv2.imshow('Translação', translated_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

Neste exemplo, video é o caminho para o vídeo de entrada e dx e dy são as quantidades desejadas de deslocamento nas direções horizontal e vertical, respectivamente.

Rotação de um vídeo

A rotação de um vídeo refere-se a girar o vídeo em um determinado ângulo. Para realizar a rotação, usamos a função cv2.getRotationMatrix2D() para calcular a matriz de rotação e, em seguida, a função cv2.warpAffine() para aplicá-la.

def rotacao(video, angulo, escala=1.0):
    cap = cv2.VideoCapture(video)
    width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

    out = cv2.VideoWriter('video_rotacionado.mp4', cv2.VideoWriter_fourcc(*'mp4v'), 25, (width, height))

    while(cap.isOpened()):
        ret, frame = cap.read()

        if ret == True:
            M = cv2.getRotationMatrix2D((width/2, height/2), angulo, escala)
            rotated_frame = cv2.warpAffine(frame, M, (width, height))
            out.write(rotated_frame)

            cv2.imshow('Rotação', rotated_frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    out.release()
    cv2.destroyAllWindows()

Neste exemplo, video é o caminho para o vídeo de entrada, angulo é o ângulo de rotação desejado e escala é o fator de escala opcional para a rotação.

Executando as funções

Agora podemos chamar as funções escala(), translacao() ou rotacao() com os argumentos desejados para aplicar as transformações em um vídeo específico. Por exemplo:

escala('video_original.mp4', 0.5)
translacao('video_original.mp4', 50, -30)
rotacao('video_original.mp4', 45, 0.7)

Certifique-se de fornecer um caminho válido para o vídeo de entrada e ajustar os parâmetros conforme necessário para cada transformação.

Espero que este tutorial tenha sido útil para você entender como realizar operações de escala, translação e rotação em vídeos usando Python e a biblioteca OpenCV. Divirta-se explorando essas técnicas e experimentando-as em seus próprios projetos!