http://blog.naver.com/action713/220059761072 이곳의 소스를 실행해 보고자 한다.
1>------ 빌드 시작: 프로젝트: opencv2010, 구성: Debug Win32 ------
1>빌드 시작:
2014-07-22 오전 10:06:13
1>InitializeBuildStatus:
1>
"Debug\opencv2010.unsuccessfulbuild"에 연결(touching)하고
있습니다.
1>ClCompile:
1>
surftest.cpp
1>c:\opencv\build\include\opencv2\flann\dist.h : warning
C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드
형식으로 저장하십시오.
1>c:\opencv\build\include\opencv2\flann\dist.h : warning
C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드
형식으로 저장하십시오.
1>c:\opencv\build\include\opencv2\flann\dist.h : warning
C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드
형식으로 저장하십시오.
1>c:\opencv\build\include\opencv2\flann\dist.h : warning
C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게 하려면 해당 파일을 유니코드
형식으로 저장하십시오.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(6): error
C2871: 'Std' : 같은 이름을 가진 네임스페이스가
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(18): error C2065:
'fstream' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(18): error
C2146: 구문 오류 : ';'이(가) 'fout' 식별자 앞에
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(18): error C2065:
'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(20): error
C2065: 'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(20): error
C2228: '.open' 왼쪽에는 클래스/구조체/공용 구조체가 있어야 합니다.
1> ''unknown-type''
형식입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(20): error
C2653: 'ios' : 클래스 또는 네임스페이스 이름이
아닙니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(20): error C2065:
'out' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(21): error
C2065: 'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(21): error
C2228: '.is_open' 왼쪽에는 클래스/구조체/공용 구조체가 있어야 합니다.
1>
''unknown-type''
형식입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(22): error
C2065: 'cerr' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(22): error
C2065: 'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(27): error
C2065: 'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(27): error
C2137: 문자 상수가 비어
있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(27): error C2065:
'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(30): error
C2065: 'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(30): error
C2065: 'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(30): error
C2059: 구문 오류 : ')'
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(30):
error C2143: 구문 오류 : ';'이(가) '{' 앞에
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(31): error C2065:
'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(32): error
C2065: 'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34): error
C2065: 'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34): error
C2137: 문자 상수가 비어
있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34): error C2059:
구문 오류 : '>'
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34):
error C2137: 문자 상수가 비어
있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34): error C2137:
문자 상수가 비어 있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(34):
error C2137: 문자 상수가 비어
있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(36): error C2065:
'j' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(36): error
C2065: 'j' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(36): error
C2059: 구문 오류 : ')'
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(36):
error C2143: 구문 오류 : ';'이(가) '{' 앞에
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(37): error C2065:
'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(37): error
C2065: 'j' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(37): error
C2137: 문자 상수가 비어
있습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(39): error C2065:
'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(39): error
C2065: 'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(42): error
C2065: 'fout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(42): error
C2228: '.close' 왼쪽에는 클래스/구조체/공용 구조체가 있어야 합니다.
1> ''unknown-type''
형식입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(52): error
C2065: 'cerr' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(52): error
C2065: 'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(59): error
C2065: 'cerr' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(59): error
C2065: 'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(69): error
C2296: '&' : 왼쪽 피연산자 형식으로 'CvSeq **'을(를) 사용할 수
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(69): error C2297:
'&' : 오른쪽 피연산자 형식으로 'CvSeq *'을(를) 사용할 수
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(69): error C2660:
'cvExtractSURF' : 함수는 5개의 매개 변수를 사용하지
않습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(70): error C2065:
'cout' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(70): error
C2065: 'endl' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(76): error
C2065: 'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(76): error
C2065: 'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(76): error
C2059: 구문 오류 : ')'
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(76):
error C2143: 구문 오류 : ';'이(가) '{' 앞에
없습니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(77): error C2065:
'i' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(82): error
C2065: 'radius' : 선언되지 않은
식별자입니다.
1>c:\uk1\vb2010\opencv2010\opencv2010\surftest.cpp(83): error
C2065: 'radius' : 선언되지 않은 식별자입니다.
1> stdafx.cpp
1> 코드를 생성하고
있습니다...
1>
1>빌드하지 못했습니다.
1>
1>경과 시간:
00:00:01.25
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
그런데..온갖 에러가 난다..
잡아가야지..
에러 1.
1>warning C4819: 현재 코드 페이지(949)에서 표시할 수 없는 문자가 파일에 들어 있습니다. 데이터가 손실되지 않게
하려면 해당 파일을 유니코드 형식으로 저장하십시오.
http://gandus.tistory.com/607
해결방법
프로젝트 -> 속성 -> 구성속성 -> C/C++ -> 고급 -> 특정 경고 사용 안 함에 "4819" 에러 코드를 입력합니다
에러 2.
1> error C2871: 'Std' : 같은 이름을 가진 네임스페이스가 없습니다.
http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=303012&ref=303012
using namespace std; // 여기다 선언하는게 아닙니다. 이 시점에서는 네임스페이스를 알 수가 없지요
// 헤더에 선언되어 있는데 어떻게 알겠습니까?
#include <iostream>
using namespace std; // 여기다 선언해주셔야죠.
// 아니면 using std::cout; 으로 해줘도 좋고요. 이 경우엔 말이죠
int main()
{
cout << "Hello, World!\n";
return 0;
}
혹은
#include "stdafx.h" 추가하시고, stdafx.cpp를 먼저 컴파일 해주세요. 프로젝트에서 stdafx.cpp 우클릭 컴파일...
찾다보니 내 경우에는 std를 Std라고 써서 에러가 났던 것이다.
=====> 이부분만 수정해도 많은 빨간 줄이 사라졌다.
에러 3.
1>error C2137: 문자 상수가 비어 있습니다.
http://msdn.microsoft.com/ko-kr/library/fhxwbt0t(v=vs.90).aspx
'' 이렇게 되어 있는 부분에서 에러가 났는데
' ' 이런식으로 빈공간을 주거나
"" 큰따옴표로 바꿔줬더니 빨간줄은 사라졌다. 그러나. 맞게 한 것인지는 모르겠다.
에러 4.
error C2065: 'i' : 선언되지 않은 식별자입니다.
error C2065: 'j' : 선언되지 않은 식별자입니다.
[속성] - [구성속성]-[c/c++]-[언어] "for 루프 범위 강제 규칙"을 예 에서 아니오 로 변경
나의 경우 아니오를 했어도 에러가 났다..
보니까 선언은 대문자로 변수?는 소문자로 암튼 뒤죽박죽이라 소문자로 통일했더니 사라졌다.
에러 5.
error C2059: 구문 오류 : ')'
for문의 조건문 마지막에 나던 에러인데..
i + + 라고 되어 있어서
다닥다닥 붙여주었다..
에러 6.
error C2059: 구문 오류 : '>'
fout << point-> pt.x << "" << point- > pt.y << "" << point-> size
<< "" << point-> laplacian << "" ;
이거 에서
fout << point-> pt.x << "" << point-> pt.y << "" << point-> size
<< "" << point-> laplacian << "" ;
로 수정..
에러 7.
error C2296: '&' : 왼쪽 피연산자 형식으로 'CvSeq **'을(를) 사용할 수 없습니다.
error
C2297: '&' : 오른쪽 피연산자 형식으로 'CvSeq *'을(를) 사용할 수 없습니다.
error C2660:
'cvExtractSURF' : 함수는 5개의 매개 변수를 사용하지 않습니다.
cvExtractSURF (grayImage, 0 , & imageKeypoints & imageDescriptors, storage, params); 을
cvExtractSURF (grayImage, 0 , &imageKeypoints , &imageDescriptors,
storage, params); 으로 변경
에러 8.
error C2065: 'radius' : 선언되지 않은 식별자입니다.
선언은 대문자로
사용할 땐 소문자로 되어있어서
소문자로 통일.
다 끝난줄 알았는데..빌드해보니..
1>------ 빌드 시작: 프로젝트: opencv2010, 구성: Debug Win32 ------
1>빌드 시작:
2014-07-22 오전 10:53:07
1>InitializeBuildStatus:
1>
"Debug\opencv2010.unsuccessfulbuild"에 연결(touching)하고
있습니다.
1>ClCompile:
1> surftest.cpp
1>MSVCRTD.lib(crtexe.obj)
: error LNK2019: _main 외부 기호(참조 위치: ___tmainCRTStartup 함수)에서 확인하지
못했습니다.
1>C:\uk1\vb2010\opencv2010\Debug\opencv2010.exe : fatal error
LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
1>
1>빌드하지 못했습니다.
1>
1>경과
시간: 00:00:01.97
========== 빌드: 성공 0, 실패 1, 최신 0, 생략 0 ==========
Main 이러고 쓰여있어서
main으로 수정.
성공함.
이건 혹시나 해서
저 에러가 나는 경우는 두 가지라고 함.
1.메인함수의 이름이 다르다
2,환경 설정이 잘못되었다.
1) 만들 떄 콘솔로 만들었다면
[속성] - [c/c++] - [전처리기] - [전처리기 정의]에서 _CONSOLE를 _WINDOWS로 바꾼다.
2)
[속성] - [링커] - [시스템] 하위시스템에서 콘솔로 되어 있으면 WINDOWS로 바꾼다.
# include <opencv\cv.h>
# include <opencv\highgui.h>
# include <iostream>
# include <fstream>using namespace std;
//using namespace Std; Std라고쓰면 에러
//using std::cout;
const int DIM_VECTOR = 128 ;
// 128 차원 벡터/**
* SURF 정보를 파일에 출력
* @ param [in] filename SURF를 저장할 파일 이름
* @ param [in] imageKeypoints SURF 키포인트 정보
* @ param [in] imageDescriptors SURF 특징 벡터 정보
* @ return 없음
*/
void writeSURF ( const char * filename, CvSeq * imageKeypoints, CvSeq * imageDescriptors) {
fstream fout;fout.open (filename, ios :: out);
if (! fout.is_open ()) {
cerr << "cannot open file :" << filename << endl;
return ;
}// 첫 번째 행은 키 포인트 수와 특징 량의 차원 수를 기록
fout << imageKeypoints-> total << "" << DIM_VECTOR << endl;// 두 번째 행에서 키포인트 정보와 특징 벡터를 기록
for ( int i = 0 ; i <imageKeypoints-> total; i ++) {
CvSURFPoint * point = (CvSURFPoint *) cvGetSeqElem (imageKeypoints, i);
float * descriptor = ( float *) cvGetSeqElem (imageDescriptors, i);
// 키 포인트 정보 (X 좌표, Y 좌표, 크기, 라플라시안)를 기록
fout << point-> pt.x << "" << point-> pt.y << "" << point-> size << "" << point-> laplacian << "" ;
// 특징 벡터를 기록
for ( int j = 0 ; j <DIM_VECTOR; j ++) {
fout << descriptor [j] << "" ;
}
fout << endl;
}fout.close ();
}int main ( int argc, char ** argv) {
const char* imageFile = argc == 3 ? argv[1] : "image/accordion_image_0001.jpg"; <-폴더위치모름
const char* surfFile = argc == 3 ? argv[2] : "image/accordion_image_0001.surf"; <-폴더위치모름// SURF 추출 용 이미지를 그레이 스케일로로드
IplImage * grayImage = cvLoadImage (imageFile, CV_LOAD_IMAGE_GRAYSCALE);
if (! grayImage) {
cerr << "cannot find image file :" << imageFile << endl;
return - 1 ;
}// 키 포인트 그리기 용 색상도로드
IplImage * colorImage = cvLoadImage (imageFile, CV_LOAD_IMAGE_COLOR);
if (! colorImage) {
cerr << "cannot find image file :" << imageFile << endl;
return - 1 ;
}CvMemStorage * storage = cvCreateMemStorage ( 0 );
CvSeq * imageKeypoints = 0 ;
CvSeq * imageDescriptors = 0 ;
CvSURFParams params = cvSURFParams ( 500 , 1 );// 이미지에서 SURF를 가져
cvExtractSURF (grayImage, 0 , & imageKeypoints, & imageDescriptors, storage, params);
cout << "Image Descriptors :" << imageDescriptors-> total << endl;// SURF를 파일로 출력
writeSURF (surfFile, imageKeypoints, imageDescriptors);// 이미지에 키 포인트를 그리기
for ( int i = 0 ; i <imageKeypoints-> total; i ++) {
CvSURFPoint * point = (CvSURFPoint *) cvGetSeqElem (imageKeypoints, i);
CvPoint center; // 키포인트의 중심 좌표
int radius; // 키포인트의 반경
center.x = cvRound (point-> pt.x);
center.y = cvRound (point-> pt.y);
radius = cvRound (point-> size * 1.2 / 9.0 * 2.0 );
cvCircle (colorImage, center, radius, cvScalar ( 0 , 255 , 255 ), 1 , 8 , 0 );
}cvNamedWindow ( "SURF" );
cvShowImage ( "SURF" , colorImage);
cvWaitKey ( 0 );// 뒤처리
cvReleaseImage (& grayImage);
cvReleaseImage (& colorImage);
cvClearSeq (imageKeypoints);
cvClearSeq (imageDescriptors);
cvReleaseMemStorage (& storage);
cvDestroyAllWindows ();return 0 ;
}
'차근차근 > OpenCV' 카테고리의 다른 글
이클립스(케플러) + openCV2.4.9 +cmake + minGW + windows8 (0) | 2014.07.30 |
---|---|
VS2010 + openCV2.4.9 "이거 따라해서 성공" (0) | 2014.07.30 |
[c] 헤더파일 선언 < > 와 " " 차이 (0) | 2014.07.30 |
물체 모델 데이터베이스 만들기 예제소스 수정하기 (1) | 2014.07.30 |
비슷한 이미지 검색 시스템을 만들자 (0) | 2014.07.30 |