길고 지리한 시간이었다. 지난 토요일부터 장장 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 상단에 넣어주고,
아래 부분을 버튼 이벤트 안에 넣어주었다.
휴 이제 이미지는 뜬다!! ㅠㅠㅠ
분명 제대로 설정된 경우에 막힘없이 실행이 될 건데 뭐이리 돌아가는지.. 문제를 해결하는 뿌듯함이 있지만 시간이 아깝다. 나에게 중요한 문제는 이것이 아닌데...
결론은 지금 가지고 있는 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);
휴 이제 이미지는 뜬다!! ㅠㅠㅠ
분명 제대로 설정된 경우에 막힘없이 실행이 될 건데 뭐이리 돌아가는지.. 문제를 해결하는 뿌듯함이 있지만 시간이 아깝다. 나에게 중요한 문제는 이것이 아닌데...