*무게 중심(Center of Mass)
 - 좌표 공간에서의  무게 중심
 무게 중심 = sum(좌표값) / 좌표 개수
좌표 값을 모두 합한 뒤, 좌표의 개수로 나눔으로써 쉽게 구할 수 있다.
*영상의 무게 중심
- 영상 무게 중심 = sum(픽셀) / 픽셀 갯수
int nCount; // 총 픽셀 수
int nSumX; // X 좌표수
int nSumY; // Y 좌표수
double dCenter[2];           // 중심 좌표..
for(int i = 0; i < height; i++)
{
  index = i*img->widthStep;
  for(int j = 0; j < width; j++)
  {
    if( (BYTE)img->imageData[index + j] == 255)
    {
      nCount++;
      nSumX += j;
      nSumY += i;
    }
  }
}
/////////////////////////////////////////////////////////////////

if( nCount != 0 )
{
  dCenter[0] = nSumX  / nCount;
  dCenter[1] = nSumY  / nCount;
}
else
   dCenter[0] =  dCenter[1] = 0;

OpenCV에서 한글 출력과 관련해서 웹에서 찾아보니.. Conv2 님의 블로그에 보니 함수를 직접 만들어 사용하는 법이 나와 있었다.

정지 영상에서는 아무 문제없이 잘 되는 듯해서 사용하고 있었는데, 이것을 실시간 동영상으로 받아서 처리하다보니.. 메모리가 새는 문제가 있었다. (GDI증가.. 메모리 증가... 그러다가.. 다운... ㅠㅠ)
 Conv2님은 그대로 사용하지 말라고 했으나, 경고를 무시한 나의 잘못이니.. 그래서.. 직접 수정하기로 했다..

Conv2님의 설명은 아래 링크를 따라 가면 된다..

수정해서 나온 코드는 아래와 같다..
* 헤더 부분

* 소스부분

* 사용법

이렇게 처리하면 화면 메모리가 계속 증가해서 시스템이 다운되는 문제가 해결되었다.

아직까지는 문제가 없는 듯하지만.. 다른 문제가 발생한다면.. 다시 한번 찾아봐야지.. 뭐...

에고 힘들다..

P.S Conv2님의 글에 트랙백을 걸려고 했으나.. 트랙백이 막혀 있는지 트랙백 에러가 난다.. ㅠㅠ
두 라이브러리를 사용하다보니 서로 변환할 일이 생겼다.. 그래서.. 구글 사마에게 물어보니 아래와 같은 답을 보여 주었다..

ARUint8 *dataPtr;
IplImage *image_opencv, *gray_opencv;

//ARToolkit→OpenCV
image_opencv = cvCreateImage(cvSize(arImXsize, arImYsize), IPL_DEPTH_8U, 4);
memcpy(image_opencv->imageData, dataPtr, image_opencv->imageSize);

//何らかの処理
gray_opencv = cvCreateImage(cvSize(arImXsize, arImYsize), IPL_DEPTH_8U, 1);
cvCvtColor(image_opencv, gray_opencv, CV_BGRA2GRAY);
cvAdaptiveThreshold(gray_opencv, gray_opencv, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 11, 10);
cvCvtColor(gray_opencv, image_opencv, CV_GRAY2BGRA);

//OpenCV→ARToolkit
dataPtr = (ARUint8*)(image_opencv->imageData);




void ARtoIpl(IplImage* ipl, ARUint8* arimg,int flag){

int width = ipl->width; //ARのImageも同じ幅とする
int height = ipl->height; //ARのImageも同じ高さとする
int ARWidthStep = width * 4;

for(int j = 0; j < height; j++)
{
 for(int i = 0; i < width; i++)
{
  t0 = ipl->widthStep * j + i * ipl->nChannels;
  t1 = ARWidthStep * j + i * 4;
  
  for(int c = 0; c <>nChannels; c++)
{
   if(flag == -1) arimg[t1 + c] = ipl->imageData[t0 + c];
   else ipl->imageData[t0 + c] = arimg[t1 + c];
  }
 }
}




Visual 2008에서 OpenGL을 사용할려고 인터넷을 찾다보니..
opengl32.lib glu32.lib glut32.lib glaux.lib
라이브러리는 필수로 사용하는것처럼 되어있다..

그런데, 이놈의 VS2008은 glaux.h가 빠져있다.. ㅠㅠ (C++ Builder에는 잘 들어있는데...)

그런데, 웃긴것은 이 놈을 우선은 제거해도 된다는것... 

glut.h 함수만 사용해도 어느젇도 테스트 된다는것... 

정 필요하면... 웹에서 자료를 받아서 해당 폴더에 넣어주면 됨...


아래는 웹에서 찾은 자료...

[출처] http://tong.nate.com/kangdydtjs/44551101
1. OpenGL 이란?
* OpenGL 은 그래픽하드웨어가 제공하는 모든 기능들에 접근할 수 있는 수백개의 함수들을 모아 놓은것이다. 내부적으로  OpenGL은 하나의 state machine(상태기계) 처럼 작동한다. 개발자는 상태기계의 여러측면들(현재 색상, 조명, 혼합 등등)을 조사하거나 설정할 수 있다. 몇개의 상태들이 잘못 설정되면 최종적인 결과가 전혀 엉뚱하게 나오는 경우가 허다하므로,  OpenGL을 사용할때는 여러 상태들의 의미나 효과에 대해 잘 알고 있어야 한다. 
OpenGL 은 프로그래밍 언어가 아니다. 그것은 API(Application Programming Interface) 이다. API로써 OpenGL 라이브러리는 관례적으로 C를 따른다. 이것은 함수 자체가 C로 쓰여지거나 어셈블러나 다른 언어에 쓰여진 함수를 부르는 매개적 C함수가 제공되어 C가 API 에서 함수를 쉽게 부른다는것을 의미한다. (즉 우리는 C 를 사용해서 쉽게 OpenGL 을 사용)

2. OpenGL 구분
OpenGL  API는 서로 각기 다른 라이브러리로 구분된다. 
*  AUX 라이브러리에 대한 선언은 glaux.h 파일에 포함. 이 라이브러리에 포함되어 있는 함수는 정확히 OpenGL 만의 부분은 아니지만, OpenGL 을 불러내는 독립된 프레임위크를 제공하는 툴킷이다. 이 라이브러리의 모든 함수는 aux 로 시작된다. 

(tip: VS2008 에는 VS2005 까지는 있던(visual studio 2005 설치시 저절로 생기는) glaux.h 파일이 없네요. 구글에 가보니 왜 missing이냐 질문은 수백개인데 ms 욕해놓은 답말고는 아직 답변이 없네요^^. 이거 대신 뭘쓰라고 뺐냐는 질문에도 아직 답이 없구요- 책을 대략 찾아보니 aux 이용하는거는 옛날 방식이네요 아니 간단한 연습용에 주로 쓰이고 있네요. 살짝만 복잡한 그래픽 프로그래밍 코드를 보면 glaux.h 헤더 include 는 빠져있네요. 어쨌든 우리도 특별히 꼭 필요한경우에는 불러 쓰겠지만 일단은 이거 빼고 진행합시다-)

* OpenGL 을 실제로 정의하는 기능은 opengl32.dll 라이브러리와  그  gl.h 헤더파일에 들어있다. 이 라이브러리의 모든 함수는 gl 로 시작된다.

* OpenGL 유틸리티 라이브러리는 glu32.dll 과 그 glu.h 헤더파일이 있다. glu32.dll 과 glu.h 헤더파일은 구, 원반, 원통을 그리는것 과 같은 작업을 더 쉽게 만드는 유틸리티 함수가 포함되어 있다. 이 함수는 모두 glu 로 시작된다. 

* OpenGL 라이브러리와 헤더 정리

[자료 출처] http://uzys.tistory.com/entry/AR-Toolkit-Library-%EB%B0%8F-%EA%B4%80%EB%A0%A8-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%A0%95%EB%A6%AC 

혹시 몰라 자료 복사해옴..

AR관련라이브러리

FLARToolKit - Flash AR Tool Kit
http://www.libspark.org/wiki/saqoosha/FLARToolKit/en
demo - http://blog.papervision3d.org/2009/01/07/augmented-reality-with-flartoolkit/

MXR Toolkit - Only C 
http://mxrtoolkit.sourceforge.net/

Iphone용 AR TOOLKIT
http://www.artoolworks.com/ARToolKit_iPhone.html

JarToolkit 
http://sourceforge.net/projects/jartoolkit/

PyARTK - Python Binding for ARToolKit
http://mgldev.scripps.edu/projects/pyartk/

ARToolKitPlus - for mobile
http://studierstube.icg.tu-graz.ac.at/handheld_ar/artoolkitplus.php

NyARToolKit -PureJava or C# or C ****
http://nyatla.jp/nyartoolkit/wiki/index.php?FrontPage.en

AR 관련 사이트
일본
http://park7.wakwak.com/~blackbox/
미국
http://studierstube.icg.tu-graz.ac.at/handheld_ar/old_projects.php
http://projekt.medieninformatik.de/argui/05_links.htm
http://www.hcilab.pe.kr/links/linkIndex.html

설치관련 문서 및 튜토리얼
AR TOOLKIt 설치
http://203.241.190.120/cgl_board/view.php?id=seminar_under&page=2&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=vote&desc=asc&no=93
http://blog.daum.net/_blog/BlogView.do?blogid=0I9L6&articleno=2871843&categoryId=#ajax_history_home
http://blog.naver.com/julaki/80045599991

AR Toolkit Documentation and Tutorital
http://www.hitl.washington.edu/artoolkit/documentation/


상용화된 프로그램
전뇌피규어 ARis
http://www.youtube.com/watch?v=yCCx7zANsGE&eurl=http://blog.eufy.com/1071&feature=player_embedded
http://www.youtube.com/watch?v=o5ytkOgEaMU&eurl=http://www.rupaus.com/blog/127&feature=player_embedded

PS3 - EyePet
http://www.youtube.com/watch?v=KTarqm4FCDY&eurl=http://yoon-o.tistory.com/77&feature=player_embedded

ARToolkit + OpenVRML Setting 

다음 사이트를 참조..
http://calmarea.net/?p=167
- Cximage api에 대해 잘 정리해 놓은것 퍼와서 편집함...
http://katalog.egloos.com/tb/2626276

A. CxImage classes
1. CxPoint2

2. CxRect2 


3. CxFile
추상클래스로 CxIOFile, CxMemFile의 부모 클래스가 된다. 

4. CxIOFile 

5. CxMemFile 
메모리 상에서 파일 입출력의 형태를 구현한 것이다. 



6. CxImage 

IplImage -> Bitmap 로 변경시

Bitmap -> IplImage 로 변경시

+ Recent posts