c소스를 추가시켜서 빌드했더니 자꾸 

error LNK2001: unresolved external symbol  가 떠서 extern C를 썼더니 해결



[c, c++]extern "C" 에 관하여...
출처:http://jimbo73.egloos.com

extern "C"에 대하여 알아보자.

컴파일러는 링커가 링킹작업시 오브젝트간 함수 이용 및 위치를 파악할 수 있도록, 컴파일시 사용된 함수에 관련한 정보를 오브젝트 파일에 기록하며, 이러한 정보를 linkage라고 한다.

그런데 C 와 C++을 혼합하여 사용 시, 함수이용에 문제가 발생할수 있는데, 이는 두 언어간의 linkage방식이 틀리는데 기인한다.

linkage이란 컴파일 시 함수이름 앞 또는 뒤에 '_' 등의 심볼을 덧붙이는 것을 말하는것으로, C 와 C++은 컴파일시 오브젝트 파일에 함수명, 변수명등에 심볼을 기록하는 방식이 다르다.

C에서는 함수의 이름이 유일하기 때문에(즉 overloading을 지원하지 않기때문에) 함수 앞에 '_' 등의 심볼만을 붙이면 된다. 하지만 C++에서는 overloading을 지원하기 때문에 같은 이름의 함수를 여러개 가질 수 있으므로, 이에 따라 함수를 구분하기 위해서는, 함수이름만으로 구분할 수 없게된다. 그러므로 인자의 개수와 데이터형에 대한 정보까지 넣게되어(이러한 방식을 mangled name이라한다.), linkage 정보가 상이하게 된다.

그러므로 C와 C++ 을 혼합하는 프로그램에서는, link시 함수명을 각각의 방식으로 찾을 수 있도록 C인지, C++인지를 명시해주어야 하며, 이때 extern "C" 는 linkage에 대한 지시자 역할을 한다.

extern "C"는 C++의 linkage방식을 사용하지 않고, C의 linkage방식을 사용하라고 컴파일러에게 알려주는 역할을 한다.

#ifdef __cplusplus
extern "C" {
#endif

int func1();
int func2();

#ifdef __cplusplus
}
#endif 
Posted by 우주여행가
,
Rob Hess의 SIFT 오픈소스 해석

http://www.newtypeunion.com/22?category=5 등등

SURF 관련 내용도 있음

'연구관련' 카테고리의 다른 글

Computer Vision Open Source Algorithm Implementations  (0) 2010.12.03
각종 자료구조 알고리즘 정리  (0) 2010.11.22
JPEG EXIF Orientation 경우의 수  (0) 2010.11.16
Open CV Reference  (0) 2010.11.11
Virtual Pit (가짜 구덩이)  (0) 2010.10.19
Posted by 우주여행가
,

Open CV Reference

연구관련 2010. 11. 11. 15:44
Posted by 우주여행가
,



ISMAR 2010 에서 발표되었던

 

Experiences with an AR Evaluation Test Bed : Presence, Performance, and Physiological Measurement 의 데모영상입니다.

 

저자는 Maribeth Gandy, Richard Catrambone, Blair MacIntyre, Chris Alvarez, Elsa Eiriksdottir, Matthew Hilimire, Brian Davidson, Anne Collins McLaughlin

 

죽이네요..

'연구관련' 카테고리의 다른 글

Computer Vision Open Source Algorithm Implementations  (0) 2010.12.03
각종 자료구조 알고리즘 정리  (0) 2010.11.22
JPEG EXIF Orientation 경우의 수  (0) 2010.11.16
SIFT 오픈소스 해석  (0) 2010.11.15
Open CV Reference  (0) 2010.11.11
Posted by 우주여행가
,


[OpenCV 질문] BYTE 로 오는 이미지를 Iplimage로 바꾸기
[출처] BYTE 로 오는 이미지를 Iplimage로 바꾸기 (OpenCV KOREA 대한민국 최고의 컴퓨터비젼 커뮤니티) |작성자 정훈
 
 
http://cafe.naver.com/opencv/7140  
 
안녕하세요 ^^

들어와서 가끔씩 모르는거만 찾아보다가 오늘 처음 글적는게 또 질문이 되네요

다른게 아니고 현재 BYTE형식의 이미지를 받아와서 Iplimage로 변환을 하려고 하는데요. 막히네요

영상을 캡쳐해서 이미지는 BYTE value[640*480*3]으로 넘기구요. 이걸 가지고 작업을 하려고 하는데

Iplimage 형식으로 변환을 해야 작업이 진행되는데 변환할수 있는 함수나 참고 할만한게 있으면 조언좀 부탁드리겠습니다.

질문을 하면서도 횡설수설 한거 같네요 ;; 양해 부탁드립니다.

고수님들의 조언좀 부탁드려요

 작성자의 카페글 더보기

 
 김대진
2008/11/03 11:13

cvCreateImage(...);
cvSetImageDate(...);

하면 됩니다...

 정훈

자답 : Iplimage* srcImg = cvCreateImageHeader(cvSize(640, 480), IPL_DEPTH_8U, 3);
cvSetImageData(srcImg, (BYTE)BufferImg, WIDTHBYTES(640*IPL_DEPTH_8U*3));
cvFlip(srcImg, NULL, 0);
srcImg->origin = 0;
이렇게 하니 되네요 ^^ 답변 주신분 감사합니다.


네이버 opencv 카페에서 구한대로 해봤더니.. 계속 cvReleaseImage에서 에러가 났다..


밑에 참고 링크를 뒤져보니.. 이 경우엔 cvReleaseImage 대신 cvReleaseImageHeader를 써야 한단다.


예를 들어


IplImage *cloth_save = cvCreateImageHeader(cvSize(100,100),IPL_DEPTH_8U,3);

cvSetImageData(cloth_save,cimg,WIDTHBYTES(100*IPL_DEPTH_8U*3));

cvFlip(cloth_save,NULL,0);

cloth_save->origin = 0;

cvSaveImage(clothname,cloth_save);

cvReleaseImageHeader(&cloth_save);

delete[] cimg;

 


참고 :

http://opencv-users.1802565.n2.nabble.com/c-cvReleaseImage-td2415881.html



최종적으로 내가 쓴 코드..

참고로 내가 사용한 BYTE 어레이는 이미지가 순서대로 되어있고 (즉 뒤집혀서 들어온걸 보정해준 것) 이고 ,

 RGB 순서로 들어있었다..


IplImage *cloth_save = cvCreateImageHeader(cvSize(fd.wck[j],fd.hck[j]),IPL_DEPTH_8U,3);

cvSetImageData(cloth_save,fd.detected_clothRGBk[j],WIDTHBYTES(fd.wck[j]*IPL_DEPTH_8U*3));

cloth_save->widthStep = fd.wck[j]*3;

// 영상 width 가 4의 배수가 아닌 경우 제대로 되지 않아서 수정해줌..

cvSetImageData(cloth_save,fd.detected_clothRGBk[j],cloth_save->widthStep);

cvCvtColor(cloth_save,cloth_save,CV_RGB2BGR);

cvSaveImage(clothname,cloth_save);

cvReleaseImageHeader(&cloth_save);

Posted by 우주여행가
,

유용하게 써먹었던 기능...

행렬을 통채로 txt로 저장시키기.. 

>> save u2_mapping_16_3.txt a -ascii

아쉽게도.. int형으로는 안되는듯...

그냥 엑셀로 옮겨서 서식을 숫자로 바꾸면 int형으로 볼 수있긴 하다....



MATLAB관련 주요명령 및 행렬 입력 방법

http://blog.naver.com/yaho1524/60088402143



Posted by 우주여행가
,