OpenCV는 2000년대 초반 Intel의 컴퓨터 비전 엔지니어인 Gray Bradsky의 아이디어로 시작되었습니다.
대부분 러시아 출신으로 구성 된 Bradsky와 엔지니어 팀은 2002년에 버전 v0.9로 오픈 소스 소프트웨어(OSS)로 만들어 지기 전에 Intel에서 내부적으로 OpenCV의 첫 번째 버전을 개발했습니다.
이후, Bradsky는 OpenCV의 창립 멤버와 함께 Willow Garage로 옮겼습니다.
오픈 소스 프로젝트로 이 신생 라이브러리을 지원하기 시작했던 사람 중에는
Viktor Eurkhimov, Sergey Molinov, Alexander Shishkov 및 Vadim Pisarevsky(결국 2016년 Intel에 인수된 ItSeez라는 회사를 만들었음)도 포함되어 있었습니다.
버전 0.9에는 C API가 주를 이루었으며 이미 이미지 데이터 조작 함수들과 픽셀 접근, 이미지 처리, 필터링, 색공간 변환, 기하학적 형상 분석(예: 형태학적 함수, Hough 변환, 윤곽 찾기), 모션 분석, 기본 기계 학습(K-means, HMM),카메라 포즈 추정, 기본 선형 대수학(SVD, 고유 분해) 등 그 외 많은 기능들을 지원 했습니다.
이러한 대 부분많은 함수들은 오랜 세월 동안 지원 되어 왔으며, 오늘날의 OpenCV 버전에도 포함 된 것들입니다.
버전 1.0은 2006년에 출시되었으며,
이 버전은 OSS 컴퓨터 비전의 절대적인 지위를 가진 라이브러리의 시작을 알렸습니다.
2008년 말 Bradsky와 Adrian Kaehler는 OpenCV v1.1pre1을 기반으로 한 베스트셀러 Learning OpenCV 을 출판했으며, 이는 전 세계적으로 엄청난 성공을 거두며 수년 동안 OpenCV C API에 대한 완벽 길잡이로 자리잡게 되었습니다.
이런 완성도로 인해 피처 선택 용도 정도의 작은 시작이었지만, OpenCV v1은 학술 및 산업 응용 프로그램 특히 로봇 공학 영역 등의 비전 작업을 위한 매우 인기 있는 프레임워크가 되었습니다.
v1.0(2006년 말)이 출시된 후, OpenCV 프로젝트는 창립 팀이 다른 프로젝트에 몰두하고 있었고 그로부터 몇 년후에나 나타난 오픈 소스 커뮤니티가 아직 확립되지 않았기 때문에 몇 년동안의 동면기를 거치게 됩니다.
프로젝트는 2008년 말에 마이너한 에디션인 v1.1pre1을 릴리스했습니다.
하지만 2.x 버전은 아주 성공적으로 C++ API를 도입 함으로써 버전 OpenCV를 최고의 기초 비전 라이브러리가 되어 돌아 왔습니다.
버전 2.x는 OpenCV의 안정적인 브랜치로 6년(2009-2015) 동안 지속되었으며 , 2018년 초까지도 아주 최근까지도 그 브랜치가 유지보수 되었습니다.
(마지막 버전인 2.4.13.6은 2018년 2월에 릴리스되었습니다) 거의 10년 동안 이어졌습니다.
2012년 중반에 출시된 버전 2.4는 매우 안정적인 그리고 성공적인 API는 3년 동안 유지되며 매우 다양한 특징들을 도입했습니다.
버전 2.x는 당시 완전한 크로스 플랫폼이라는 목표를 지녔던 MySQL 프로젝트에서도 사용되던 CMake 빌드 시스템을 도입했습니다.
새로운 C++ API와 별개로 v2.x는 또한 v1.x'scv, cvaux, ml 등을 버리고 프로젝트 어셈블리의 필요성에 기반하는 별도의 빌드, 인클루드 및 링크가 가능하도록 모듈의 개념을 가져왔습니다(2011년경 v2.2에서).
2D 피쳐 슈트가 확장되었으며, 머신 러닝 기능, 내장된 얼굴 인식 캐스케이드 모델, 3D 재구성 기능, 그리고 가장 중요한 것은 Python 바인딩의 적용이 이 영역에 적용 되었습니다.
Python에 대한 초기 투자는 OpenCV를 그 당시에도 그랬지만, 아마도 여전히 지금까지도 사용되는 비전 프로토타이핑을 위한 최고의 도구로 만들었습니다.
버전 2.4, 2012년 중반에 출시, 2018년까지 계속 개발 되었으며, API 변경에 대한 부담감 때문에 v2.5는 한 번도 릴리즈 되지 않았으며, 단순히 v3.0으로 브랜드만 변경되었습니다(ca. mid-2013).
버전 2.4.x는 Android 및 iOS 지원,CUDA 및 OpenCL 구현, CPU 최적화(예: SSE 및 기타 SIMD 아키텍처), 엄청난 양의 새로운 알고리즘 같은 더 중요한 특징들을 계속적으로 가지고 오게 됩니다.
2015년 말에 베타 버전에서 출시된 버전 3.0은 처음에는 커뮤니티로부터 미지근한 반응을 얻었습니다.
그들은 일부 API에 주요 변경 사항들이 존재 했고, 드롭-인 교체가 불가능했기 때문에 안정적인 API를 찾고 있었습니다.
헤더 구조도 변경되어(opencv2/<module>/<module>.hpp에서 opencv2/<module>.hpp로) 이 버전으로의 변환이 훨씬 더 어려워졌습니다.
버전 2.4.11+(2015년 2월)에는 버전 간의 API 격차를 해소하는 연결 도구가 존재 했으며,
개발자가 v3.0으로 전환하는 데 도움이 되는 설명서가 제공되었습니다(https://docs.opencv.org/3.4/db/dfa/tutorial_transition_guide.html).
매우 빠른 속도로 버전 3.x가 발전하는 동안에도 제공되는 많은 패키지 관리 시스템(예: Ubuntu의 apt)과 함께 버전 2.x는 여전히 OpenCV의 안정적인 버전으로 매우 강력하게 유지되었습니다.
수 년간의 동거와 계획 끝에 버전 2.4.x는 개선된 API(많은 추상화 및 기본 클래스 도입)를 자랑하는 버전 3.x로 바뀌었고, 일반 CPU 코드와 호환되는 GPU 코드로 새로운 T-API(newTransparent API)를 통해 GPU 지원이 향상되었으며 개량 되었습니다.
커뮤니티 기여 코드를 위한 별도의 저장소인 opencv-contrib가 만들어어 졌으며 v2.4.x의 주요 코드에서 모듈로 분리/제거되어 빌드 안정성과 타이밍이 향상되었습니다.
또 다른 큰 변화는 v2.4에서 크게 개선되고 수정된 OpenCV의 머신 러닝 지원입니다.
버전 3.x는 또한 나중에 핵심 모듈에 병합된 OpenCV HAL(하드웨어 가속 계층)을 통해 Intel x86(예: ARM, NEON) 이상의 CPU 아키텍처에 대한 더 향상 된 Android 지원 및 최적화를 추진 하였습니다.
OpenCV에서 심층 신경망의 첫 등장은 v3.1(2015년 12월)에 기여 모듈로 기록되었으며 거의 2년 후 v3.3(2017년 8월)에서 핵심 모듈인 opencv-dnn으로 업그레이드되었습니다.
3.x 버전은 Intel, Nvidia, AMD 및 Google의 지원으로 GPU 및 CPU 아키텍처와의 최적화 및 호환성에 엄청난 개선을 가져왔고 최적화된 컴퓨터 비전 라이브러리로서 OpenCV의 특징이 되었습니다.
버전 4.0은 오늘날의 주요 오픈 소스 프로젝트로 OpenCV의 성숙한 형태로 받아들여 집니다.
이전 C API(많은 기능이 v0.9로 거슬러 올라감)는 포기하고 cv::String 및 cv::Ptr 하이브리드 라이브러리도 제거 된 C++11이 대신에 필수 항목이 되었습니다.
버전 4.0은 CPU 및 GPU에 대한 추가 최적화를 추구합니다. 하지만, 가장 흥미로운 에디션은 그래프 API(G-API) 모듈입니다.
Google의 TensorFlow 딥 러닝 라이브러리와 Facebook의 PyTorch의 큰 성공에 힘입어 G-API는
CPU 및 GPU에서 이기종 실행과 컴퓨터 비전용 컴퓨팅 그래프 구축 지원을 통해 OpenCV에 시대의 영혼이 되었습니다.
그래프 실행, 교차 호환성 및 최적화된 알고리즘의 광범위한 제공, 딥 러닝과 머신 러닝, Python 및 기타 언어에 대한 오랜 투자로 OpenCV는 몇 년 후 현존하는 최고의 개방형 컴퓨터 비전 라이브러리로서 커뮤니티 지원이 매우 강력한 미래 지향적인 프로젝트로서 존재 하게 되었습니다.
'프로그래밍' 카테고리의 다른 글
C++ Move 문법을 이용한 외부 할당 메모리 포인터 관리 (1) | 2022.11.14 |
---|---|
차근차근 따라하는 다이얼로그 기반 윈32 C 프로그램 (0) | 2022.11.08 |
Nodejs 로 Http GET 메시지 테스트 하기 (1) | 2022.09.10 |
아파치 POI로 하는 엑셀 프로그래밍-2 (0) | 2022.09.07 |
아파치 POI로 하는 Excel 프로그래밍 (0) | 2022.09.03 |