반응형

Python에서 OpenCV를 사용하기 위해서는,

다음과 같은 환경이 준비되어야 한다.

(윈도우 기준)


1. 다운로드

  • Python 및 수학, 그래픽 관련 패키지
  • OpenCV의 Python용 모듈
    • python-OpenCV
      • 여러가지 목록 중에서, 자신의 환경에 맞는 것을 골라야 한다.
      • 예를 들어, 목록명이 다음과 같은 경우,
        • opencv_python-3.4.1+contrib-cp36-cp36m-win_amd64.whl
      • OpenCV버전은 3.4.1이고, 
      • OpenCV Contribute를 포함하며, 
      • 아나콘다의 python 버전은 3.6.x이고,
      • OS는 64bit임을 의미한다.


2. 설치

  • 일단은 Anaconda 설치 파일을 통해, python 및 관련 패키지를 설치한다.
  • Anaconda Prompt를 실행한 다음, python-OpenCV가 있는 폴더로 가서, pip 명령을 실행한다.
    • pip install [다운로드된 파일명]



반응형
반응형

OpenCV3의 샘플들을 살펴보던 중에,

KCF(kcf.cpp)를 발견하게 되었다.

OpenCV Extra Modules에 포함되어 있으며,

정확한 경로는 다음과 같다.

  • opencv_contrib/modules/tracking/samples/kcf.cpp


이 파일은, tracking 알고리즘 증에서 KCF(Kernelized Correlation Filters)를 구현한 것이다.

테스트해보니, 속도가 빠르면서도 좋은 성능을 보여 주는 것 같다.


KCF에 대한 자세한 설명은, 다음 사이트에 나와 있다.


위 사이트에 따르면, 이 방식은 트랙킹 방식 중에서 최상위에 속하는 TLD나 Struck 보다도

좋은 성능을 발휘한다고 한다.

그리고, 앞으로의 개발을 위해 프레임워크를 Open Source로 공개한다고도 한다.


반응형

'영상처리 프로젝트' 카테고리의 다른 글

신규 떨림보정(자유도 4, 자유도 2) 테스트  (0) 2016.12.22
OpenCV 2.x와 3.x의 차이  (0) 2016.10.20
opencv_contrib 빌드하기  (0) 2016.03.22
OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
반응형

  • OpenCV Extra Modules 소개
    1. 다음 사이트에 가면, OpenCV Extra Modules에 대해 잘 소개되어 있다.
    2. 내용인즉슨, 새로운 API가 OpenCV에 추가되는 경우, 아직 안정성이나 성능이 검증되지 않았으므로, 처음에는 공식 배포본 대신, Extra Modules(opencv_contrib)에 포함시킨다.
    3. 이후 안정성이 검증되고 사용 빈도가 많아지면, 메인 모듈(공식 배포본)에 포함되어 배포된다.


  • OpenCV Extra Modules 빌드 방법
    1. 다음 사이트의 [Download ZIP] 버튼을 통해, opencv-contrib-master.zip 파일을 다운로드 받는다.
    2. 압축을 해제한다.
    3. 다음 사이트 내용을 참고하여, OpenCV 빌드를 준비한다.(7번까지 진행)
    4. CMake GUI화면의 'OPENCV_EXTRA_MODULES_PATH'항목에 [opencv-contrib-master폴더]/modules를 선택해 준다.
    5. http://pgmaru.tistory.com/53의 8번부터 계속 진행한다.


  • VisualStudio2008로 빌드할 경우의 문제해결 방법
    • CMake를 통해 솔루션이 생성된 다음, VisualStudio2008로 빌드를 진행하게 되면, 몇몇 파일에서 컴파일 에러가 발생한다.
    • 빌드 진행을 위해서는, 다음과 같이 소스를 수정해 주어야 한다.
      1. [opencv-contrib-master폴더]/modules/line_descriptor/samples/knn_matching.cpp의 114행
        • result += (uchar) ( bin_vector[i] * pow( 2, i ) );
        • result += (uchar) ( bin_vector[i] * pow( 2.0, i ) );
        • 으로 변경해 준다
      2. [opencv-contrib-master폴더]/modules/optflow/samples/optical_flow_evaluation.cpp의 10행
        • 다음 내용을 추가해 준다.

        #ifdef WIN32

            #ifndef NAN

                static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff};

                #define NAN (*(const float *) __nan)

            #endif

        #endif


반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 2.x와 3.x의 차이  (0) 2016.10.20
KCF(Kernelized Correlation Filters)  (0) 2016.05.23
OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
반응형
<조건>
항목 내용
원본 동영상 사이즈 640*360
Resize 크기 1280*720
OpenCV 버전 OpenCV3.1(TBB) 
기능 Resize+떨림+객체+안개+윤곽


CPU 사양 속도
i5 3470 3.20GHz 10.86 FPS
Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz 4.39 FPS


집 PC : 10.8566FPS

(사양 : i5 3470 3.20GHz, RAM 8GB, 64bit Window, x64 기반 프로세서)

(디스플레이 : NVidia GeForce GT630)

사무실 개발PC : 10.8554FPS

(사양 : i5-3470 3.20GHz, Ram 4GB, 32bit window)

(디스플레이 : Inte4l(R) HD Graphics)


반응형
반응형

영상처리 속도개선을 위해 사용되는 방법들 중에 대표적인 것이,

병렬처리와 GPU 사용일 것이다.

병렬처리는 TBB나 IPPCV등을 통해서 구현되며,

GPU 사용은 CUDA와 OpenCL등을 통해 구현된다.


CUDA는 그래픽카드가 NVidia인 경우에만 사용 가능하다.

반면 OpenCL은 기타 여러가지 경우에 사용 가능하다.

이에 대한 내용은 다음 사이트에 잘 나와 있다.

Platform -> OpenCL

OpenCV상에서 실제로 OpenCL을 사용할 때의 키워드는 UMat이다.

그리고, 다음 사이트에도 중요한 내용이 담겨 있다.

OpenCV3.0 Architecture

이 내용을 알아야 UMat을 잘 사용할 수 있다.

특히, getMat(), getUMat()을 사용하는 경우,

get...을 통해 얻어진 Matrix가 해제될 때까지는

원본 Mat을 사용할 수 없다는 사실에 유의해야 한다.


또한, 다음 내용도 참고할 필요가 있다.

OpenCL Module Introduction

CPU와 GPU간 데이터 전송은 성능저하를 유발할 수 있기 때문에

필요한 경우에만 사용해야 하고,

GPU가 double형 연산을 지원하지 못하는데 double형 연산을 구현하는 경우

에러가 발생한다는 내용 등이 쓰여져 있다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

opencv_contrib 빌드하기  (0) 2016.03.22
OpenCV속도비교2  (1) 2016.02.29
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
반응형

기존에 쓰던 OpenCV2.1과 OpenCV 3.1의 속도 차이를 비교해 보려 한다.

OpenCV2.1은 기본 빌드였고, OpenCV3.1은 TBB, CUDA 등의 옵션을 추가하였다.

테스트는, 원본 동영상의 처음부터 200번째 프레임까지 

해당 영상 처리를 적용하면서 얼마나 시간이 소요되는지를 측정하여

FPS를 구하였다.

원본 동영상의 사이즈는 640 * 360, Resize는 1280 * 720으로 하였다.

참고로, PC 사양은 다음과 같다.

  • 프로세서 : Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz  2.40 GHz
  • RAM     : 2.00GB
  • 시스템   : 32비트 운영체제, x64 기반 프로세서


결과는 다음과 같다.

비교항목 

OpenCV2.1 

OpenCV3.1(TBB) 

OpenCV3.1(TBB+CUDA) 

기본 

 62.75 FPS

 63.37 FPS

 

Resize 

 15.70 FPS

 18.03 FPS

 

떨림보정 

 8.01 FPS

 28.26 FPS

 

객체추적

 42.66 FPS

 59.26 FPS

 

안개보정

 28.01 FPS

 29.22 FPS

 

윤곽선 강조

 15.84 FPS

 31.45 FPS

 

떨림+객체+안개+윤곽

 5.53 FPS

 15.08 FPS

 

Resize+떨림+객체+안개+윤곽

 1.58 FPS

 4.39 FPS

 


이로써, OpenCV3.1(with TBB)로 전환함으로써 속도 향상이 가능함을 확인하였다고 할 수 있다.

한편 CUDA에 대해서는, 별도의 그래픽카드를 장착하지 않았기 때문에 테스트하지 못했다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV속도비교2  (1) 2016.02.29
OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
반응형

OpenCV 3.0 빌드 체험기2

몇번의 시행착오를 거쳐서, 

드디어 빌드에 성공했다.

다음 사이트 내용을 참고하여, Visual C++ 2008 Express Edition용으로 빌드하였다.

* 참고 사이트 : http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/windows_install/windows_install.html


그러면서 알게 된 몇가지 주의점을 여기에 적어 본다.

  1. CMake에서 ENABLE_SOLUTION_FOLDERS 체크 해제
    • VisualStudion가 Solution Folder를 지원하는 경우에는, 이 항목을 체크하는 것이 좋다. 하지만, VC++ 2008 Express Edition의 경우에는 Solution Folder를 지원하지 않기 때문에, 체크를 해제해야만 했다.
  2. TBB(Threading Building Blocks)버전은 4.3으로
    • TBB의 최신 버전은 4.4이다. 하지만 4.4의 경우, VC 10 이전 버전용 라이브러리가 제공되지 않는다. VC++ 2008은 VC 9이며, VC 9용 라이브러리를 제공하는 TBB 최신 버전은 4.3이다.
  3. std::vector::data의 컴파일 오류 해결
    • VC++ 2008로 빌드하다 보면, 다음과 같은 오류가 발행한다.
      • error C2039: 'data' : is not a member of 'std::vector<_Ty>'
    • 원인은, std::vector::data는 C++ 11부터 추가된 메소드이기 때문이다.
    • 따라서, 에러가 나는 부분은 VC 9에 맞게 바꾸어 주어야 하는데, 구체적으로는 다음과 같다.
      • modules/videoio/src/cap_mjpeg_decoder.cpp의 793번째 행 :
      • m_file_stream.read(result.data(), chunk.m_size);을
      • m_file_stream.read(&result[0], chunk.m_size);으로 변경
  4. 사전에 VS2008SP1 설치
    • 설치 후 빌드를 하다 보면, '__cpuidex'라는 구문 때문에 컴파일 에러가 발생하는 경우가 있다.
    • 이에 대해 검색해 보면, VS2008SP1을 설치해야 한다고 나온다.


위와 같은 내용만 신경 쓰면, 문제 없이 빌드가 진행된다.

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.x에서의 OpenCL  (0) 2016.02.25
OpenCV 속도 비교 테스트 - 2.1 vs 3.1(with TBB)  (0) 2016.02.18
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
OpenCV 속도 개선 방법  (2) 2015.12.04
반응형

OpenCV 3.0 빌드 체험기

기존에 쓰던 OpenCV 버전이 2.1인데,

속도 개선도 좀 하고, 혹시 새로운 알고리즘도 활용할 수 있지 않을까 해서

이참에 3.0으로 업데이트해 보려고 한다.

OpenCV 3.0의 Pre-Built 버전은 VC11과 12용으로밖에 안나와 있어서,

사정상 VC2008을 써야 하는 나로써는

소스로부터 직접 빌드를 해야 한다.

그런데, 빌드 과정이 내게도 익숙하지 않은지라,

다음 사이트를 참고해서 한단계씩 진행해 나가고,

그 과정을 기록해 보려 한다.

* 참고 사이트 : http://docs.opencv.org/3.0-beta/doc/tutorials/introduction/windows_install/windows_install.html


  • 다음 사이트로부터, 윈도우즈용 OpenCV를 다운로드한다.
    • http://opencv.org/downloads.html
  • 참고 사이트 내용대로, OpenCV를 빌드한다.
    1. 사전 준비 사항 
      • TBB : 병렬 처리를 통해 속도 향상 가능. Intel은 물론 AMD CPU에서도 사용 가능
      • IPP : 멀티 코어 시스템상에서 멀티미디어, 데이터 처리, 통신 등을 빠르게 처리할 수 있도록 최적화해서 제공되는 라이브러리. OpenCV에 이미 포함되어 있으므로, 따로 신경 쓰지 않아도 됨
      • Intel ⓒ IPP Asynchronous C/C++는, 아직 IPP에 포함되지 않는 것 같으므로 건너뜀
      • Eigen : 선형대수를 위한 C++ 라이브러리
      • CUDA는, AMD에 적용할 수 없으므로 건너뜀
      • OpenEXR은, HDR(High Dynamic Range)를 위한 작업에 사용되므로, 건너뜀
      • OpenNI Framework는, Kinect와 같은 장치를 쓸 때 필요하므로, 건너뜀
    2. 빌드를 위해, CMake를 Install한다.(CMake는, 크로스-플랫폼 빌드 도구이다.)
    3. Git 툴을 인스톨한다.(예:msysgit + TurtoiseGit)
    4. 어느 폴더에 다운로드 받을지를 정한 다음(예 : D:\OpenCV), 다음 주소의 내용을 Clone한다
    5. TBB를 다운로드한 다음, 압축 해제 후 특정 폴더(예 : D:\OpenCV/dep)에 넣어둔다.
    6. CMake(cmake-gui) 실행 후, OpenCV 소스폴더를 지정(예 : D:\OpenCV/Source)해 주고, 빌드용 파일이 저장될 폴더를 지정(예 : D:\OpenCV/Builds)해 준다.
    7. Configure 버튼을 누른다. 그러면, 컴파일러를 지정하라는 대화상자가 뜨는데, 적절한 컴파일러(내 경우는 Visual Studio 9 2008)을 선택해 준다.
    8. 빌드 가능한 패키지들이 기본적으로 선택되어진 화면이 나타난다. 여기에 추가할 패키지를 선택하고, 다시 Configure 버튼을 누른다.
    9. 빌드 정보가 부족한 경우, 추가적인 정보를 입력할 수 있게 해당 필드가 빨갛게 하이라이트 되어서 나타난다(내 경우는, TBB의 INCLUDE폴더 경로). 해당 필드를 수동으로 입력해 준 다음, 다시 Configure버튼을 누른다. 이 과정을 빨간색 하이라이트가 나오지 않을 때까지 반복한다.
    10. Generate 버튼을 누르면, 빌드용 파일이 지정된 폴더에 저장된다.
    11. 해당 폴더로 가서, OpenCV.sln파일을 열면 VisualStudio에서 솔루션이 열린다. 이후로는, VisualStudio를 통해 빌드를 진행하면 된다.


반응형
반응형

HD 및 HDR의 이해

HD를 검색하는 중에 HDR이란 단어를 발견하게 되었다.

처음에는 HD와 관련있는 용어인가보다 싶었는데

전혀 그렇지 않을뿐더러, 나름 흥미로운 내용이라

그냥 넘어가기 아쉬워서, 간단하게나마 정리해 보려 한다.


1. HD(High-Definition)

HD는 High-Definition의 약자인데, 이미 대중화된 용어라서

누구나 대략적인 의미는 알고 있을 것이다.

위키백과에 보면, SD(Standard definition, 표준해상도)보다 더 높은 해상도를 의미한다고 나와 있다.

https://ko.wikipedia.org/wiki/고선명_비디오

또한, 다음 링크에는 LG 디스플레이에서 해상도 관련 용어를 풀어쓴 내용이 나온다.

http://blog.lgdisplay.com/2014/07/그림으로-쉽게-알아보는-hd-해상도의-차이

정리하자면, 다음과 같다.

 

 해상도

포맷 

 SD

720 X 480

480p 

 HD

1,280 X 720 

720p 

 FHD

1,920 X 1,080 

1080p, 1080i 

 QHD

3,840 X 2,160 

2160p 

 UHD

4,096 X 2,160 

2160p 


2. HDR(High Dynamic Range Imaging)

위키백과 링크는 다음과 같다.

https://ko.wikipedia.org/wiki/하이_다이나믹_레인지_이미징

보통 디지털 이미지는 8비트 3채널(RGB)로 이미지를 표현한다. 8비트로 표현할 수 있는 정수는 0~255까지이다.

하지만 HDR에서는 표현 범위를 8비트 이상으로 확대하는데, 보통 32비트까지 확대해서 표현한다고 한다.

일반적인 디지털 카메라 역시 8비트 3채널을 이용하여 이미지를 표현하기 때문에,

HDR 이미지를 얻기 위해서는 같은 대상을 서로 다른 노출값으로 찍음 다음,

각각의 노출값 및 이미지들을 가지고 32비트 값을 계산해 낸다.

하지만 일반적인 디스플레이 장치에는 32비트 이미지를 표시할 수 없기 떄문에 다시 8비트 이미지로 변환해야 하는데, 

이 작업을 '톤매핑(tonemapping)'이라고 한다.


한편, HDR 이미지를 만들지 않고 노출값이 다른 이미지들을 전체적으로 잘 보이도록 합성하기도 하는데,

이런 기법은 별도로 'Exposure Fusion'이라고 한다.


OpenCV를 이용하여 HDR이미지를 다루는 방법은,

다음 링크에 잘 설명되어 있다.

http://docs.opencv.org/3.0-last-rst/doc/tutorials/photo/hdr_imaging/hdr_imaging.html#hdrimaging

반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.0 빌드 체험기2  (0) 2015.12.15
OpenCV 3.0 빌드 체험기  (0) 2015.12.10
OpenCV 속도 개선 방법  (2) 2015.12.04
OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
2차 개발 계획  (0) 2015.07.22
반응형

OpenCV 속도 개선 방법

영상처리 작업은 많은 연산을 해야 하기 때문에,

속도를 높일 수 있는 방법을 늘 고민하게 된다.

OpenCV에는 이미 연산 속도를 높이기 위한 기법들이 사용되고 있는데,

특히나 병렬처리(IPP, TBB) 및 GPU 사용 등을 통해 효과를 볼 수 있다.

이와 관련해서, 다음과 같은 블로그들에 참고할 만한 내용이 들어있어서,

여기에 소개하려 한다.


반응형

'영상처리 프로젝트' 카테고리의 다른 글

OpenCV 3.0 빌드 체험기  (0) 2015.12.10
HD 및 HDR의 이해  (0) 2015.12.04
OpenCV를 이용한 Blurring, Sharpening  (0) 2015.08.21
2차 개발 계획  (0) 2015.07.22
1차 개선 완료  (0) 2015.07.21

+ Recent posts