OpenCV 코딩좀 해볼까
VC6 을 실행해서 새로운 프로젝트를 하나 만들었다. 간단하게 콘솔 화면에서 개발하기 위하여 File -> New -> Projects -> Win32 Console Application 으로 프로젝트를 생성하고 main.c 파일을 하나 생성하였다.
자 이제 코딩을 한번 해보자!!
.
.
.
.
.
.
.
그런데 뭐 부터 시작하지. ㅡㅡ;;
좀 난감하다. 뭘 할지 아직 생각을 안했다. T.T
하지만!!
이건 확실하다. 영상처리를 할 이미지가 한 장 필요하다는 사실.
그래서
요즘 잘 듣는 노래 "Lollipop" 과 관련된 2NE1 의 사진을 어디선가 한 장 엎어왔다.
짠!!

앞으로 이놈(?) 으로 작업을 해보자.
일단 copy 해서 위에서 생성한 프로젝트 폴더에 복사해놓자. 이름은 2ne1.jpg 이다.
자! 이제 소스코드를 구해보자.
구글링을 하던 네이버링을 하던 찾아보면 코드는 많다.
#include <cv.h>
#include <highgui.h>
int main(int argc, char **argv)
{
int i;
IplImage * src_img = 0, *dst_img[3];
if (argc >= 2)
src_img = cvLoadImage (argv[1], CV_LOAD_IMAGE_ANYDEPTH | CV_LOAD_IMAGE_ANYCOLOR);
if (src_img == 0)
exit (-1);
for (i = 0; i < 3; i++)
dst_img[i] = cvCloneImage (src_img);
cvSmooth (src_img, dst_img[0], CV_BLUR, 5, 0, 0, 0);
cvSmooth (src_img, dst_img[1], CV_GAUSSIAN, 11, 0, 0, 0);
cvSmooth (src_img, dst_img[2], CV_MEDIAN, 5, 0, 0, 0);
cvNamedWindow("Blur", CV_WINDOW_AUTOSIZE);
cvShowImage ("Blur", dst_img[0]);
cvNamedWindow ("Gaussian", CV_WINDOW_AUTOSIZE);
cvShowImage ("Gaussian", dst_img[1]);
cvNamedWindow ("Median", CV_WINDOW_AUTOSIZE);
cvShowImage ("Median", dst_img[2]);
cvWaitKey (0);
cvDestroyWindow ("Blur");
cvDestroyWindow ("Gaussian");
cvDestroyWindow ("Median");
cvReleaseImage (&src_img);
for (i = 0; i < 4; i++) {
cvReleaseImage (&dst_img[i]);
}
return 0;
}
이 코드를 사용하자. 아직 실행은 안해봤는데, 보아하니 블러(Low pass filter) 인듯하다. 컴파일 해보자. 복사해서 main.c 파일에 붙여놓고 컴파일 해보자.
에러 발생한다. 라이브러리 없댄다. 셋팅값 수정좀 하자. Project -> Settings -> Link 이동 Object/library modules: 에 다음을 추가하자.
cxcore.lib cv.lib highgui.lib
라이브러리 추가하면 컴파일이 잘 될 것이다. 해봤더니 잘 되네. 컴파일 & 링크 성공.
실행하면

에러가 발생한다.
excore110.dll을(를) 찾을 수 없으므로 응용 프로그램을 시작하지 못했습니다. 이 문제를 해결하려면 응용 프로그램을 다시 설치하십시오
해결하자. DLL 없다고 에러나는거니 환경변수에 Path 설정하거나 해당 DLL 파일 복사해오거나 둘중에 하나 하면 될것 같다. Path 설정은 다음에하고, 그냥 복사해와야겠다.
C:\Program Files\OpenCV\bin
해당 경로를 나중에 환경변수 Path 에 추가하고, 일단은 DLL 복사해와야겠다. 일단 눈에 보이는 DLL은 전부 복사해서 위에서 생성한 프로젝트 경로의 Debug 라는 폴더에 복사했다. Debug 폴더는 이미 만들어져 있다. 복사 완료했으면 다시 실행해보자.
또 문제 발생.

응용 프로그램을 제대로 초기화하지 못했습니다(0xc0150002). 응용 프로그램을 마치려면 [확인]을 클릭하십시오
슬슬 스팀이 올라오기 시작한다. 이 문제는 가늠하기가 힘들다. 검색을 해보자.
해봤더니......
1.0을 설치하면 샘플은 VC++ 6.0으로 컴파일되어 있습니다.
XP에는 6.0용 라이브러리가 ....\system32\에 기본적으로 설치가 되어 있어서 바로 실행이 되죠. 그러나 1.1은 VC 2005버전으로 컴파일된 것이 설치가 됨으로 VC++ 2005(or with SP1) 런타임 파일이 없으면 실행이 안됩니다. PS. 라이센스 걱정없는 VC++ 2008 Express 버전으로 개발해서 데모를 보여주시면 될텐데요?
MFC는 사용못하지만 Win32 API 및 WTL(특정 SDK 필요)은 사용할 수 있습니다.
그럴싸하고, 설득력이 있다.
현재 내가 사용하는 버전은 위에서 말한것처럼 1.1 이다. 그런데 개발은 VC6.0 에서 할려고 했으니 이런 문제가 발생하는것이다. 해결방법은 2가지가 있다.
1. VC2005 이상버전을 사용
2. VC2005 런타임 환경을 설치 (VC6.0은 계속사용)
VC6.0에 익숙한 나로써는 2번의 해결책을 사용하기로 하였다. 그래서 VC2005 런타임 환경을 찾아봤다.
http://www.microsoft.com/downloads/thankyou.aspx?familyId=200b2fd9-ae1a-4a14-984d-389c36f85647&displayLang=en
다운로드 받아서 설치해보자
설치해서 다시 컴파일 & 실행을 해봤더니....
에러가 없다. 다행이다. T.T
에러도 없지만 아무런 반응도 없다.
소스코드를 유심히 보니, 인자값으로 2ne1.jpg 값을 줘야 할것 같다.
Project -> Settings 이동 Program arguments 에 2ne1.jpg 를 입력했더니 결과물이 제대로 나온다.



Trackback URL : http://rainless.ipocs.com/blog/trackback/187
2008도 똑같은 에러 ->sp1깔고 ok 입니다. ???????????
아하~ 그렇군요.
vc2008을 쓸때 참고하겠습니다. /(^^ )