python - videocapture - Lectura de una imagen.JPG y guardarla sin cambiar el tamaño del archivo
take a picture with webcam python (2)
Quiero escribir un código python que lea una imagen .jpg, modifique algunos de sus componentes RBG y guárdelo de nuevo, sin cambiar el tamaño de la imagen.
Traté de cargar la imagen usando OpenCV y PyGame, sin embargo, cuando probé un simple código de Cargar / Guardar, usando tres funciones diferentes, las imágenes resultantes son de mayor tamaño que la imagen inicial. Este es el código que utilicé
>>> import cv, pygame # Importing OpenCV & PyGame libraries.
>>> image_opencv = cv.LoadImage(''lena.jpg'')
>>> image_opencv_matrix = cv.LoadImageM(''lena.jpg'')
>>> image_pygame = pygame.image.load(''lena.jpg'')
>>> cv.SaveImage(''lena_opencv.jpg'', image_opencv)
>>> cv.SaveImage(''lena_opencv_matrix.jpg'', image_opencv_matrix)
>>> pygame.image.save(image_pygame, ''lena_pygame.jpg'')
El tamaño original era 48.3K, y el resultante es 75.5K, 75.5K, 49.9K.
Por lo tanto, no estoy seguro de que me falta algo que hace que la imagen cambie el tamaño original, aunque solo hice una carga / guardado, ¿o no?
¿Y hay una mejor biblioteca para usar en lugar de OpenCV o PyGame?
El tamaño de una salida JPEG depende de 3 cosas:
- Las dimensiones de la imagen original. En tu caso, estos son los mismos para los 3 ejemplos.
- La complejidad del color dentro de la imagen. Una imagen con muchos detalles será más grande que una que esté totalmente en blanco.
- La configuración de calidad utilizada en el codificador. En su caso, utilizó los valores predeterminados, que parecen ser más altos para OpenCV frente a PyGame. Una configuración de mejor calidad generará un archivo más cercano al original (menos con pérdidas) pero más grande.
Debido a la naturaleza con pérdida de JPEG, algo de esto es ligeramente impredecible. Puede guardar una imagen con una configuración de calidad particular, abrir esa nueva imagen y guardarla nuevamente con la misma configuración de calidad, y es probable que tenga un tamaño ligeramente diferente debido a los cambios introducidos cuando la guardó por primera vez.
JPEG es un formato de imagen con pérdida. Cuando abre y guarda uno, está codificando toda la imagen nuevamente. Puede ajustar la configuración de calidad para aproximarse al tamaño del archivo original, pero perderá algo de calidad de imagen independientemente. No hay una forma general de saber cuál era la configuración de calidad original, pero si el tamaño del archivo es importante, podría adivinar hasta que lo tenga cerca.