2012-08-31 12 views
5

que quería probar a cabo algunas operaciones sencillas de archivos y empecé con abrir y guardar archivos (yo uso de Python)OpenCV - imread(), imwrite() aumenta el tamaño de png?

image = cv2.imread("image.png") 
cv2.imwrite("image_processed.png", image) 

Después de esta operación mi original image de 33KB transforma en una misma imagen 144KB la mira.

He intentado hacer algo como esto: http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite

params = list() 
    params.append(cv.CV_IMWRITE_PNG_COMPRESSION) 
    params.append(8) 

    image = cv2.imread("image.png") 
    cv2.imwrite("image_processed.png",image,params) 

Pero esto no cambia mucho (disminución del tamaño de 132KB)

Ésta es la imagen que estoy trabajando con:

enter image description here

+0

Tuve el mismo problema con la compresión png. Cambiar a 'scikit-image' y usar su' imsave' funcionaba de maravillas. – letmaik

Respuesta

5

Algunos escritores png como GIMP escriben PNG comprimidos mucho mejores que el estándar libpng, que se utiliza por opencv. También puede abrir y guardar la imagen nuevamente con Imagemagick, y ver qué diferencia hace (en comparación con OpenCV).

Incluso hay software especializado que intenta recomponer mejor los PNG, como pngcrush.

¿Puede proporcionar la imagen en cuestión? Me gustaría jugar con eso, con respecto a la optimización del tamaño del archivo.

+0

He agregado la imagen con la que estoy trabajando. Considerando su respuesta, me doy cuenta de que hay programas que me permitirán disminuir el tamaño de png, pero me gustaría utilizar la funcionalidad de OpenCV. – Patryk

+1

Proporcionó un archivo JPEG en lugar del archivo PNG original, por lo que no puedo ver la compresión. Pero aparte de eso: no obtendrá una mejor compresión a través de OpenCV. Una última cosa puede ser que almacene imágenes de 16 bits en lugar de 8 bits. Esto sucede si usa una matriz CV_16U. – ypnos

2

Según lo insinuado por ypnos, su archivo fuente es jpg (incluso si tiene la extensión png). Por eso, cuando lo guardas en formato png, usará más espacio, ya que estás cambiando el formato (jpg a png).

intentar sustituir la última línea con:

cv2.imwrite("image_processed.jpg",image,params) 

Y se verá que el tamaño no cambia mucho.

alternativa, mantenga el código tal como es, sino el uso de una imagen diferente, como http://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png

0

semi-relacionados, pero no tenía el mismo problema con matplotlib.image.imsave - sería guardar una imagen en escala de grises de 8 bits como 16 -bit, que incrementó el tamaño, incluso después de usar scipy.misc.bytescale para asegurarse de que era una matriz de 8 bits. Sin embargo, scipy.misc.imsave lo guardó correctamente como una imagen de 8 bits.

Cuestiones relacionadas