OpenCV와 Turbo-JPEG 관련 이슈

bemong1·2023년 12월 26일
0

간단한 테스트를 위해 OpenCV를 사용하던 중, 해당 라이브러리를 사용하여 jpeg 인코딩시에 속도가 느림을 인지

1. cv2.imwrite() 함수를 사용하여 jpg로 인코딩 시, 속도가 느림

  • 기본 배포판(OpenCV 4.6.0)에서 작업 중에, 인코딩 속도가 다소 느리다고 느낌
  • OpenCV의 경우, 다양한 라이브러리를 지원하고 있기에, Turbo-JPEG을 포함하여 빌드하기로 함

2. 기본 배포판은 이미 Turbo-JPEG를 포함하여 빌드되어있음

  • 이미 OpenCV 3.4.3 버전부터 C++, Python 모두 Turbo-JPEG을 기본으로 포함하여 Build된 Release 버전을 배포하고 있음
  • 마찬가지로 사용중인 배포판 버전(4.6.0) 역시 Turbo-JPEG를 포함하여 빌드되어 있으며, jpeg 인코딩 시 해당 라이브러리를 사용하여 jpg 파일로 저장되는 것을 확인

3. 하지만, Turbo-JPEG가 적용되어 있는 것 치고는 많이 느림...

  • 무언가 이상하다 싶어서, 4.6.0 버전을 새로 빌드하였으며, Turbo-JPEG를 제외하고 빌드하여 보았음
  • 충격적이게도 Turbo-JPEG를 포함하지 않고 빌드한 버전에서 약 2~3배 속도 향상이 있었음

4. 측정 결과

  • 아래 표는 Turbo-JPEG 라이브러리의 포함유무에 따른 OpenCV와, Turbo-JPEG를 단독으로 사용하여 인코딩 하였을때의 속도 측정 결과임
    • 단위시간(ns) / 4K, FHD, HD 각각 Image 1000장의 평균 처리 시간

      Turbo-JPEGcv::imwrite(libjpeg)cv::imwrite(libjpeg-turbo)libjpeg-turbocv::imwrite(libjpeg) vs libjpeg-turbocv::imwrite(libjpeg-turbo) vs libjpeg-turbo
      4K437888711076125753052855443.43% 상승252.49% 상승
      FHD1230681429966525659311286.66% 상승354.51% 상승
      HD5567289134011702714794105.07% 상승393.63% 상승

5. 원인


6. 결론

  • 그냥 Turbo-JPEG 쓰는게 제일 빠르고 속편함. (Turbo-JPEG이 포함 된 OpenCV Release의 2.5배 이상)
  • imwrite()는 버리고, OpenCV Mat 객체 내의 Raw Data만 따로 뽑아내서 Turbo-JPEG를 사용하는 방식으로 변경
profile
개발자

0개의 댓글