Visual Studio 2010 OpenCV 2.4.9 환경설정 드디어 끝!!

길고 지리한 시간이었다. 지난 토요일부터 장장 4일간 환경설정에만 삽질을 하였다.

결론은 지금 가지고 있는 Visual Studio 2012 버전이 이상한 것 같다는 것이다. 중요한 라이브러리 파일이 VS2012 설치폴더 안에 없었다. 아래 링크류의 오류였다.

http://stackoverflow.com/questions/13344746/cannot-open-include-files-assert-h-maltab-system

조언대로 몇 번이나 repair 해도 안생기고, 매뉴얼로 무슨 파일을 넣어줘야 될지도 모르겠고.. 이런.



결국 Visual Studio 2010 Express 를 설치하고, 몇가지 에러 핸들링을 해줬더니 바로 컴파일 된다. 아 진작 해볼걸... 되지도 않는 2012에 너무 시간을 낭비했다.

환경설정은 아래 링크 참조.

http://fona.tistory.com/11


+ 15년6월 23일 추가
Release 모드로 사용할 때, Linker > Input > Additional Dependencies 는 아래와 같이 추가해야 된다.
opencv_calib3d249.lib
opencv_contrib249.lib
opencv_core249.lib
opencv_features2d249.lib
opencv_flann249.lib
opencv_gpu249.lib
opencv_highgui249.lib
opencv_imgproc249.lib
opencv_legacy249.lib
opencv_ml249.lib
opencv_nonfree249.lib
opencv_objdetect249.lib
opencv_ocl249.lib
opencv_photo249.lib
opencv_stitching249.lib
opencv_superres249.lib
opencv_ts249.lib
opencv_video249.lib
opencv_videostab249.lib

(파일 이름이'd'로 끝나지 않게 수정)

- 추가 닫음





+ 몇가지 빌드 에러는 다음 방법으로 해결.

에러1) warning C4819: The file contains a character that cannot be represented in the current code page (949). Save the file in Unicode format to prevent data loss

http://egloos.zum.com/i0nucleus/v/2799050


에러2) fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt

http://stackoverflow.com/questions/10888391/error-link-fatal-error-lnk1123-failure-during-conversion-to-coff-file-inval
(환경설정 수정 후 서비스팩을 다시 깔고. 컴파일러 팩을 다시 깔아야 함. 링크에 설명되어 있음)




이렇게 하니 Console Application에서는 잘 실행이 된다.

휴 이제 빨리 제대로 개발 한번 해보자! 아자!!!



++

그런데 버튼을 넣으려니 opencv에서는 버튼을 지원하지 않는단다. (정말일까?)

여튼 개인적으로 편한 Toolbox를 쓰기 위해서 GUI 어플리케이션을 제작해보려 했더니 MFC가 없다. Express 버전이라서.. 하하. 어쩔 수 없이 Windows Forms 로 프로젝트를 생성하였다.

(MFC와 Windows Forms의 차이는 여기에: 1) MSDN 2) Devpia  솔직히 내 수준에서 이해는 안되지만..)

윈폼으로 프로젝트를 생성하고, 아래 링크를 참조하여 코드를 작성했다.

http://answers.opencv.org/question/22564/how-to-do-opencv-in-windows-application/

그랬더니 이번엔 디버깅 에러가.. ㅠㅠ

에러) Debug Assertion Failed _CrtIsValidHeapPointer(pUserData)

라는 식의 에러. 또 검색하니 나온다. ㅎㅎ 다행.

https://social.msdn.microsoft.com/Forums/vstudio/en-US/62db4002-4ebc-4a3a-91ec-9fc702db821e/crtisvalidheappointerpuserdata-why-is-this-code-broken-vs2008?forum=vcgeneral

아랫부분 쯤에 해결책이 나오는데, __DllMainCRTStartup@12   를 Project Properties > Linker > Input > Force System References  에 넣어주면 된다.

이제 디버깅 에러는 안나지만 어째서 코드가 동작하지 않아서 수정해줬다. ㅠ

아래 부분을 Form1.h 상단에 넣어주고,

// includes for openCV functionality in the item handlers
#include <opencv\cv.h>
#include <opencv\highgui.h>



아래 부분을 버튼 이벤트 안에 넣어주었다.

// Visualize the image using openCV functionality
cv::Mat image = cv::imread("C:\\Users\\Public\\Pictures\\Sample Pictures\\Desert.jpg", 1);
cv::imshow("test_window", image);




휴 이제 이미지는 뜬다!! ㅠㅠㅠ

분명 제대로 설정된 경우에 막힘없이 실행이 될 건데 뭐이리 돌아가는지.. 문제를 해결하는 뿌듯함이 있지만 시간이 아깝다. 나에게 중요한 문제는 이것이 아닌데...