파이썬(Python)/opencv

[Python]OpenCV 이미지 파일 용량(화질) 변경(압축)해서 저장하기

끄적끄적아무거나 2022. 2. 11. 18:18
반응형

 

목차

     

     

     

    [Python]OpenCV 이미지 파일 용량(화질) 변경해서 저장하기 : JPG

     

    앞서 imwrite 함수 사용에 대해 간단하게 알아보았습니다. (https://scribblinganything.tistory.com/469

    이번에는 imwrite의 파라미터 값을 이용해서 원본의 화질 / 파일 크기를 줄여 보도록 하겠습니다. 

     

    JPG, JPEG 파일의 경우 아래와 같은 파라미터 값을 넣습니다. 화질 정도는 0~100을 넣어 100은 원본 그대로 이고 0은 최저 화질로 생각하시면 됩니다.

     

    [cv2.IMWRITE_JPEG_QUALITY, 화질 정도]

     

    예제 코드를 통해 어떻게 동작하는 지 쉽게 알아보겠습니다.

     

     

    예제 코드>>

    import cv2
    import os
    
    img_ori = cv2.imread('flowers.png')
    
    cv2.imwrite("flowers_30.jpg", img_ori, [cv2.IMWRITE_JPEG_QUALITY, 30])
    cv2.imwrite("flowers_80.jpg", img_ori, [cv2.IMWRITE_JPEG_QUALITY, 80])
    
    file_size = os.path.getsize('flowers.png')
    print("Original png file size : " + str(file_size) + " Bytes")
    file_size = os.path.getsize('flowers_80.jpg')
    print("flowers_80 jpg file size : " + str(file_size) + " Bytes")
    file_size = os.path.getsize('flowers_30.jpg')
    print("flowers_30 jpg file size : " + str(file_size) + " Bytes")

    3번 라인 : flowers라는 이미지 파일을 imread로 읽어 옵니다.

    6~7번 라인: 읽어온 image 파일을 30%, 80% quality의 화질로 변경해서 각 각 jpg에 저장합니다.

    9~14번 라인 : 원조와 변경된 이미지 파일의 용량을 비교 합니다.

     

    결과>>

    Original png file size : 447973 Bytes
    flowers_80 jpg file size : 106026 Bytes
    flowers_30 jpg file size : 49151 Bytes

     

     

     

     

    [Python]OpenCV 이미지 파일 압축해서 저장하기 : PNG

     

    PNG 이미지 파일은 압축하는 파라미터를 제공 합니다. 압축 정도는 0~9 중에 설정할 수 있고 9는 가장 높은 압축률을 의미 합니다. 

     

    파라미터 입력은 아래와 같이 합니다. 

    [int(cv2.IMWRITE_PNG_COMPRESSION),압축률]

     

    아래 예제를 통해 쉽게 이해할 수 있습니다.

     

    예제 코드>>

    import cv2
    import os
    
    img_ori = cv2.imread('flowers.png')
    
    cv2.imwrite("flowers_3.png", img_ori, [int(cv2.IMWRITE_PNG_COMPRESSION),3])
    cv2.imwrite("flowers_5.png", img_ori, [int(cv2.IMWRITE_PNG_COMPRESSION),5])
    
    file_size = os.path.getsize('flowers.png')
    print("Original png file size : " + str(file_size) + " Bytes")
    file_size = os.path.getsize('flowers_3.png')
    print("flowers_3 png file size : " + str(file_size) + " Bytes")
    file_size = os.path.getsize('flowers_5.png')
    print("flowers_5 png file size : " + str(file_size) + " Bytes")

    6~7번 라인: 이번에는 읽은 image 파일을 png format으로 저장합니다. 그리고 압축률을 3, 5로 각 각 설정합니다.

     

    결과>>

    Original png file size : 447973 Bytes
    flowers_3 png file size : 410062 Bytes
    flowers_5 png file size : 408122 Bytes

     

     

    압축률 5로 지정한 파일이 압축을 크게 하였습니다.

     

     

    반응형