2016년 10월 27일 목요일

matlab and octave opencv mex 사용하기


MEX 파일의 MEX는 ‘MATLAB Executable’의 약자로 MATLAB에서 호출하여 사용할 수 있는 파일이다.
자동 생성된 C코드를 검증하기 위한 목적으로 사용할 수 있습니다. 좀 더 구체적으로 설명하면 MEX파일은 MATLAB코드를 C코드로 변경한 후 이를 다시 MATLAB에서 사용하기 위해 컴파일된 파일이다.


- MetLab -
 
GitHub에서 mexopencv 빌드하기

Build하기 전 OpenCV 3.1 을 설치해야 한다. (github에서 제공하는 mexopencvopencv 3.1 라이브러리를 사용해 MEX파일을 만들기 때문에 다른 버전은 에러발생)



1.  Windows SDK설치해야한다. Visual Studio 2010 sp1과 충돌이 있다고 하니 유의하자.  (http://celdee.tistory.com/765)




2. 설치가 끝났다면 mexopencv 설치. 

다운 받을 수 있는 홈페이지https://github.com/kyamagu/mexopencv 

( 위 소스는 Opencv 함수 모든 함수를 MEX파일로 바꾼다. )



3. 설치가 끝나면 경로 설정에서 mexopencv 폴더를 경로에 추가.

4. 실행 명령어창에 아래 명령어를 입력.

1)mex –setup c++

2)mexopencv.make('opencv_path', 'C:\OpenCV\build')   // opencv full 소스
출처 : https://github.com/kyamagu/mexopencv#windows


c/c++ 함수를 MEX파일로 만들기

mexFunction 함수의 코드의 main함수와 같이 사용하고 mex compile을 이용하여 *.mexw32 (windows 32 bit 기준확장자를 갖는 MATLAB command, script, function에서 사용할 수 있는 실행함수를 구현할 수 있다.
mexfunction(int nlhs, mxArray *plhe[], int nrhs, const mxArray *prhs[])
{
}


nlhs : left-hand-side의 개수의 약자로 MATLAB함수의 출력 변수의 개수를 의미한다.

plhs출력 변수의 이중 포인터로 함수의 리턴값을 저장한다.

nrhs : right-hand-side의 개수의 약자로 MATLAB함수의 입력 변수의 개수를 의미한다.

prhs입력 변수의 이중 포인터로 함수의 입력값을 받는다.

컴파일 과정

mex –setup 컴파일러 설정

mex mextest.c

Matlab에서 제공하는‘Computer Vision System Toolbox’ 를 이용해 쉽게 만들 수 있다. Computer Vision System toolboxOpenCV Interface C++ API tesseract-OCR 언어 데이터 파일을 제공한다. CV 알고리즘, OpenCV 함수등을 Matlab에서 편리하게 MEX-files형태로 사용 가능하게 한다.



ToolBox 이용하기


Matlab 명령어창

 >> visionSupportPackages
Install from internet선택하고 next한다.
OpenCV Interface 선택한다.




Opencv 함수 별 MEX파일 만들기

>> mex –setup c++          // 명령어를 통해 컴파일러 언어 설정을 C++로 선택한다.
>> cd(fullfile(fileparts(which('mexOpenCV')),'example',filesep,'TemplateMatching'))

Cpp 파일이 있는곳으로 디렉토리를 이동한다.

Ex) >> mexOpencv matchTemplateOCV.cpp

matchTemplateOCV MEX-file이 생성된다.

- 출처 -

http://kr.mathworks.com/help/vision/ug/opencv-interface.html tool 이용해 Opencv 함수 MEX-file로 만들기
http://kr.mathworks.com/videos/using-opencv-with-matlab-97710.html?s_eid=PSM_12984 Using OpenCV with MATLAB

-Octave-


Cmake-gui tool 이용해서 직접 opencv build 하기



필요한 프로그램 설치

https://cmake.org/download/ 에서 Cmake3.6 설치하고,

http://opencv.org/ OpenCV 3.1 설치한다.


 MinGW 컴파일러 설치

Cmake-gui 실행하고, 설치한 OpenCV경로에 맞게 설정한다.


Cmake-gui tool 이용해서 직접 opencv build 하기

Configure을 누르면 컴파일러 설정창이 나오는데, MinGW 선택 ( 설정전에 환경변수 path;C:\MinGW\bin 을 미리 추가해야 한다. )
 
Configure가 완료되면 Generatebuild하고 완료되면 처음 설정한 openCV\release 경로에 가서 확인한다.

 
Octave를 실행하고, mexopencv 경로로 설정한 후 명령어창에 >> mexopencv.make('opencv_path','E:\opencv\release') 를 입력하면 Mex파일이 완성된다.



Mexopencv\+cv 디렉토리를 확인하면 함수별 .mex파일이 생성된다.



(주 의) opencv version, cmake version, mexopencv 및 컴파일러 버전 때문에 build 과정 중에서 에러발생이 일어나는 상황이 자주 발생할 수 있다. 호환성문제 아직 미해결

 -> 이를 편리하게 모두 build 해놓은 바이너리 파일을 설치할 수 있다.




Binary file 설치해서 build하기



download binaries of OpenCV (+ opencv_contrib) compiled using Octave's MinGW: build_mingw_x86.7z 바이너리파일 설치




mexOpenCV 설치




Octave를 실행하고, mexopencv path이동후에

>> mexopencv.make(‘opencv_path’, ‘바이너리파일 경로’) 명령어로 mex파일을 만들 수 있다.

Ex) >> mexopencv.make(‘opencv_path’, ‘E:\build_mingw_x86\install’)