How to compress png file with opencv in python?

A. Sarmiento picture A. Sarmiento · Oct 13, 2016 · Viewed 19.2k times · Source

I tried this code:

compression_params = [cv2.CV_IMWRITE_PNG_COMPRESSION, 9] 
img = cv2.imread('img1.png', cv2.IMREAD_UNCHANGED) 
cv2.imwrite('compress_img1.png', img, compression_params)

But I obtain this error:

AttributeError: module 'cv2' has no attribute 'CV_IMWRITE_PNG_COMPRESSION'

I'm working with python 3.5 and opencv 3.0

Answer

Miki picture Miki · Oct 13, 2016

The name in OpenCV 3.0 is IMWRITE_PNG_COMPRESSION (without the CV_ prefix).

So try:

cv2.imwrite('compress_img1.png', img,  [cv2.IMWRITE_PNG_COMPRESSION, 9])

This post mentions also to cast to int. I'm not sure if this is still needed:

cv2.imwrite('compress_img1.png', img,  [int(cv2.IMWRITE_PNG_COMPRESSION), 9])