본문 바로가기
Python

[Python] PIL, Pillow, OpenCV, and Scikit-image

by ds31x 2024. 6. 3.

PIL, Pillow, OpenCV, and Scikit-image

Python에서 이미지를 다룰 때 이용되는 주요 패키지들은 다음과 같음.

1.PIL (Python Imaging Library)

  • PIL은 1995년에 처음 개발된 Python의 최초 이미지 처리 라이브러리 중 하나임. 매우 직관적이고 사용하기 쉬운 API를 제공하여 많은 개발자들에게 사랑받았음.
  • 그러나 2011년 이후로 더 이상 업데이트가 되지 않아 최신 Python 버전과 호환성 문제가 발생했음.
  • 공식 사이트: PIL 공식 사이트

2.Pillow

  • Pillow는 PIL의 포크(fork) 버전으로, 2010년에 개발되기 시작했음.
  • PIL의 기능을 계승하면서도 지속적인 업데이트와 버그 수정을 통해 최신 Python 환경에서도 안정적으로 작동함.
  • Pillow는 PIL과 거의 동일한 API를 제공하며, 추가 기능과 개선된 성능을 자랑함.
  • 공식 사이트: Pillow 공식 사이트
 

Python Pillow

Discussion Discussion about Pillow development, programming and technical issues occurs on GitHub, Stack Overflow and Gitter.

python-pillow.org

더보기

Pillow라는 이름은 원래의 이미지 처리 라이브러리인 PIL (Python Imaging Library)의 이름을 잇는다는 의미에서 지어졌음.

PIL의 이름을 계승하면서도,

"베개"를 뜻하는 'Pillow'라는 단어를 통해 사용하기 쉽고 편안한 라이브러리임을 강조하려는 의도가 포함된 Naming.

 

따라서 Pillow는

1. PIL의 철학을 계속 이어가면서도,

2. 사용자에게 더욱 편안하고 친숙한 경험을 제공하고자 하는 의미를 담고 있음.

Pillow는 PIL의 계승을 위해 모듈명이 PIL이다 (설치할 때는 pillow 임).

다음 코드를 참고.

from PIL import Image

pil_image = Image.open("Figure_1.png")

print(pil_image.format)
print(pil_image.size)
print(pil_image.mode)
print(pil_image.width)
print(pil_image.height)

pil_image.show()

3.OpenCV (Open Source Computer Vision Library)

  • OpenCV는 2000년에 인텔이 개발한 오픈 소스 컴퓨터 비전 및 머신 러닝 라이브러리임.
  • 처음에는 C/C++로 작성되었으나, Python 바인딩을 통해 Python에서도 사용 가능하게 되었음.
  • 이미지 처리뿐만 아니라, 비디오 분석, 얼굴 인식, 객체 추적 등 다양한 컴퓨터 비전 기능을 제공함.
  • 공식 사이트: OpenCV 공식 사이트
더보기

OpenCV가 Python에서는 모듈명이 cv2로 사용되는 이유는
초기 버전의 OpenCV가 Python에서 cv라는 이름으로 사용될 당시가 1.x 였는데
OpenCV 2.0이 출시되면서 라이브러리의 구조와 기능이 대폭 개선되면서
기존 버전을 명확히 구분하기 위해 cv2를 모듈 이름으로 사용하기 시작함.

 

하지만, 현재 OpenCV 2.0 이후의 모든 버전은 Python에서 cv2라는 모듈 이름을 사용하고 있음.

현재는 OpenCV 4.x 버전까지 출시되었지만, 여전히 cv2라는 이름을 유지하고 있는 이유는
이미 널리 사용되고 있는 모듈 이름을 변경하지 않고 일관성을 유지하기 위해서임.


4.scikit-image

  • scikit-image는 2009년에 시작된 사이킷-런 프로젝트의 일부로, 이미지 처리 기능을 제공하는 Python 패키지임.
  • 다양한 이미지 처리 알고리즘과 유틸리티를 제공하며, numpy 배열을 기반으로 작동하여 다른 사이킷-런 생태계와 쉽게 통합할 수 있음.
    • 참고로 opencv도 NumPy를 기반으로 함.
  • 과학 및 연구 커뮤니티에서 많이 사용되며, 데이터 분석과 시각화에 강점을 보임.
  • 공식 사이트: scikit-image 공식 사이트

결론

각 패키지는 각자 고유의 강점을 가지고 있으나, 비교를 하자면 다음 내용을 참조할 것.

  • PIL과 그 후속작인 Pillow는 사용이 간편하고, 빠른 프로토타이핑에 적합함.
    • image를 추상화한 객체로 접근하는 방식이라, django나 pytorch, keras 등의 다른 패키지들이 image를 처리할 때 기본으로 많이 사용됨.
    • 즉, 다른 패키지와 같이 설치되는 경우가 매우 많음.
  • OpenCV는 이미지 처리 외에도 컴퓨터 비전과 머신 러닝에 특화된 다양한 기능을 제공하며, 실시간 비디오 처리와 같은 복잡한 작업에 강점을 보임.
    • Vision 관련하여 가장 풍부한 구현 기능을 자랑함.
    • 단 image를 numpy의 배열과 같이 다차원 signal로 여기는 형태로 접근하다 보니 조금 까다로움.
    • 다른 패키지들과 많이 사용되지 않는 편.
  • scikit-image는 연구 및 과학적 분석에 적합한 다양한 이미지 처리 알고리즘을 제공함
    • OpenCV 이상으로 numpy와의 강력한 통합됨.
    • 데이터 분석 및 시각화 작업에서 매우 유용함.
    • 연구 논문에 대한 구현체를 직접적으로 구할 때 가장 유용함.
    • 역시 다른 패키지들과 사용은 Pillow보다 떨어짐.

같이보면 좋은 자료들

https://dsaint31.tistory.com/236

 

PIL과 opencv에서의 image 변환.

PIL과 opencv에서의 image 변환. 필요성tensorflow 나, pytorch등에서 에서의 image를 이용한 이미지 로딩의 경우, PIL.Image.Image를 기본적으로 이미지를 위한 class 타입으로 사용함.from tensorflow.keras.preprocess

dsaint31.tistory.com

https://dsaint31.me/mkdocs_site/DIP/cv2/ch00/dip_0_00/

 

BME228

1. OpenCV를 통한 Image 다루기 (읽고 쓰기) 기본적으로 cv2를 이용하여 이미지를 읽어들이고, 저장하는 방법을 다룬다. 구체적인 함수는 다음과 같다. cv2.imread cv2.imshow cv2.imwrite 추가적으로 다루는 함

dsaint31.me