📅  最后修改于: 2023-12-03 14:41:01.212000             🧑  作者: Mango
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
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.
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.
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.
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!