Python: tamaño de imagen (video) de escala por lotes

método uno:

En Pillow, el método resize() forzará que la imagen se escale al tamaño especificado, lo que puede causar deformación o distorsión de la imagen; mientras que el método thumbnail() reducirá la imagen manteniendo la relación de aspecto original sin deformación o distorsión.

Específicamente, el método thumbnail() calculará una relación de escala apropiada basada en el ancho y alto máximos especificados, y luego reducirá la imagen de acuerdo con esta relación, de modo que el ancho y el alto de la imagen final no excedan el tamaño especificado. El método resize() cambia directamente el tamaño de la imagen al tamaño especificado. Si el tamaño especificado es diferente de la relación de aspecto de la imagen original, se deformará o distorsionará.

Por lo tanto, si desea mantener la relación de aspecto original de la imagen y reducirla, se recomienda utilizar el método miniatura(); si necesita forzar que la imagen se escale a un tamaño específico, puede utilizar el método de cambio de tamaño. (), pero tenga en cuenta que puede causar distorsión o deformación.

from PIL import Image
import os

dir = r'C:\Users\1\Desktop\ffmpeg\bin\final_results'
out = r'C:\Users\1\Desktop\ffmpeg\bin\results'
def resize_image():
    for path in os.listdir(dir):
        img = os.path.join(dir, path)
        print(f'缩放图:【{img}】')
        with Image.open(img) as img:
            img.thumbnail((1280, 720))
            img.save(os.path.join(out, path))

# 调用示例
resize_image()

Método dos

import cv2

def resize_image(input_path, output_path, size):
	img = cv2.imread(input_path)
	height, width, _ = img.shape
	if width > height:
		scale = size / width
	else:
		scale = size / height
		img = cv2.resize(img, (int(width * scale), int(height * scale)))
		cv2.imwrite(output_path, img)
	
	# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
size = 640 # 宽度或高度为 640
resize_image(input_path, output_path, size)

En este código de muestra, la función resize_image recibe tres parámetros: ruta del archivo de entrada ruta_entrada, ruta del archivo de salida ruta_salida y tamaño de destino. Dentro de la función, primero use la función cv2.imread para leer el archivo de entrada y use la propiedad de forma para obtener el ancho y el alto de la imagen. Luego calcule la relación de zoom de acuerdo con la relación de tamaño entre el ancho y el alto. Finalmente, use la función cv2.resize para escalar la imagen al tamaño especificado y use la función cv2.imwrite para guardar la imagen escalada en el archivo de salida.

Cabe señalar que el uso de la biblioteca OpenCV puede requerir la instalación de dependencias relacionadas primero, y el método de instalación específico se puede encontrar en los documentos relevantes. Además, al utilizar la biblioteca OpenCV para escalar imágenes, se debe tener cuidado de mantener la relación de aspecto y evitar distorsiones o distorsiones. Específicamente, según la relación de aspecto de la imagen, se puede calcular la relación de escala y reducir la imagen a un tamaño apropiado.

método tres

from PIL import Image

def resize_image(input_path, output_path, max_size):
    img = Image.open(input_path)
    width, height = img.size
    if max(width, height) > max_size:
        if width > height:
            new_width = max_size
            new_height = int(height * (max_size / width))
    else:
        new_width = int(width * (max_size / height))
        new_height = max_size
        img = img.resize((new_width, new_height))
        img.save(output_path)

# 调用示例
input_path = 'input.jpg'
output_path = 'output.jpg'
max_size = 640 # 最大边长为 640
resize_image(input_path, output_path, max_size)

En este código de muestra, la función resize_image recibe tres parámetros: la ruta del archivo de entrada ruta_entrada, la ruta del archivo de salida ruta_salida y la longitud máxima del lado max_size. Dentro de la función, primero use la función Image.open para leer el archivo de entrada y use la propiedad de tamaño para obtener el ancho y el alto de la imagen. Luego calcule la relación de zoom de acuerdo con la relación entre la longitud lateral máxima y el tamaño de la imagen. Finalmente, use la función de cambio de tamaño para escalar la imagen al tamaño especificado y use la función guardar para guardar la imagen escalada en el archivo de salida.

Cabe señalar que cuando utilice el método de cambio de tamaño de la biblioteca Pillow, también debe prestar atención a mantener la relación de aspecto de la imagen para evitar deformaciones o distorsiones. Específicamente, según la relación de aspecto de la imagen, se puede calcular la relación de escala y reducir la imagen a un tamaño apropiado.

Método 3 (FFmpeg)

El formato del comando para escalar el tamaño del video usando ffmpeg es el siguiente:

ffmpeg -i input.mp4 -vf scale=: output.mp4

Entre ellos, representan respectivamente el ancho y alto del video ampliado, que se pueden especificar como un valor de píxel específico o un porcentaje, como 50%.

input.mp4Por ejemplo, para escalar un archivo de vídeo de entrada a un archivo de vídeo de salida con un ancho de 640 píxeles y un alto de 360 ​​píxeles output.mp4, se puede utilizar el siguiente comando:

ffmpeg -i input.mp4 -vf scale=640:360 output.mp4

Si desea escalar automáticamente según la relación de aspecto del video original, puede especificar solo el ancho o el alto y mantener la relación de aspecto del video original:

# 指定宽度为 640 像素,高度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=640:-1 output.mp4

# 指定高度为 360 像素,宽度按原始比例缩放
ffmpeg -i input.mp4 -vf scale=-1:360 output.mp4

También puedes dejar que ffmpeg conserve la relación de aspecto del video original durante el escalado para evitar la distorsión scaleagregando opciones antes del parámetro :force_original_aspect_ratio

ffmpeg -i input.mp4 -vf "scale=640:360:force_original_aspect_ratio=decrease,pad=640:360:(ow-iw)/2:(oh-ih)/2" output.mp4

En este ejemplo, padel filtro se utiliza para llenar el vídeo escalado a un tamaño de 640x360 píxeles mientras lo centra.

Supongo que te gusta

Origin blog.csdn.net/weixin_44634704/article/details/129713362
Recomendado
Clasificación