Notice»

Recent Post»

Recent Comment»

Recent Trackback»

Archive»

« 2025/9 »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

 
 

CxImage

프로그래밍/영상, 음성 | 2009. 8. 19. 14:27 | Posted by 99%
http://www.xdp.it/cximage.htm
http://www.codeproject.com/KB/graphics/cximage.aspx

함수 레퍼런스
http://www.xdp.it/cximage/

메소드 요약(한글요약)
http://katalog.egloos.com/2626276

소개

- Davide Pizzolato가 개발한 영상 처리 라이브러리.
- 2001년도 코드 프로젝에서 시작하여 오픈소스로 성장.
- 플랫폼에 종속적이지 않고 무료이다.(win,linux,wince 등)

- C++클래스로 설계되어 있으며 영상 읽기, 저장, 보기, 영상 변환 등을 구현해놨고 Image resource, File, Memory 로 생성이 가능하다.
- BMP,GIF,ICO,TGA,PCX,WBMP,WMF 가 지원되고, 그외 JPEG, PNG, MNG, TIFF 등의 포멧들은 추가 라이브러리가 필요하다. TIFF, JPEG, PNG, ZLIB, J2K 오픈 라이브러리와 연계되어 있음.
-
배포형식이 full과 lite가 있는데 lite는 CxImage 소스만을 포함하고 있으며, full에는 다른 포멧이 요구하는 라이브러리가 (jpeg, png, zlib, 등등) 포함되어 있다.


클래스 구조 -(정성호,이문호 님의 책 p.120)



설치
  1. 다운로드에서 최신버젼을 받는다.
    -> 현재 09년 7월 6.0이 최신이며 VS최신 .Net툴을 지원했다 안했다 한다;
  2. 플젝을 불러와서 컴파일한다.
    1. CxImage - 정적 라이브러리
      -> 사용시 영상 포맷관련 라이브러리도 가져와야한다. j2k.lib,jasper.lib 등..
    2. CxImageCrtDll - 정규 DLL
      -> cximagecrt.lib, cximagecrt.dll
    3. CxImageMfcDll - 정규 DLL, MFC사용(거의 사용한 흔적이 없다. 왜 이렇게 제공할까? ㅡ.ㅡ;)
      -> cximage.lib, cximage.dll
  3. 플젝 폴더에 헤더파일(23개)과 라이브러리 파일을 사용할 프로젝트로 가져와서 설정한다.
    -> #pragma comment(lib,"cximaged.lib")
         #include "xImage.h"
설정방법 및 JPG라이브러리만 사용하기



최신 라이브러리가 제대로 적용안될때(VS2008)


문제점
CxImage 소스를 VC6에서 컴파일하고 VC9로 자동업데이트 했다.(Static Library) VC9에서 sp1을 적용하게 _BIND_TO_CURRENT_VCLIBS_VERSION를 프로젝트 속성에 선언했는데 manifest를 확인해보니 CRT구버젼을 사용한다고 계속 명시되어있다.

확인해보니 이미 업데이트된 프로젝트의 속성에 입력을 해도 각각의 파일에는 그 속성이 적용이 안되고 있었다.

해결방법
VC9프로젝트 파일을 삭제하고 VC6의 프로젝트 속성에서 미리 선언해준후 다시 업그레이드한다.



정성호,이문호님의 책 소스
FirstCxImage.zip(삭제)

-> 위 설치과정이 1장에 해당되는 내용이며 소스는 책 전체의 예제이다.

'프로그래밍 > 영상, 음성' 카테고리의 다른 글

OpenCV(ComputerVision) 기본편  (1) 2009.08.19
GDI+ (& CImage)  (0) 2009.07.23
영상처리 관련 조언, 책들...  (0) 2009.07.20
IJL(Intel Jpeg Library)  (1) 2009.04.16
:
Profile - 분석표라고 정의하는게 맞는것 같다.

Visual C++ Profiling

Visual C++에서는 함수별 실행 시간, 수행 횟수 비율 등 다양한 기능을 보여주는 프로파일링 기능을 제공한다. 참고로 자바에서는 JProfiler, UNIX/Linux에서는 gprof라는 프로그램이 있다.

사용방법

1. Project Setting(Alt+F7) 에서 Ling탭의 Enable profiling을 체크한다.

3. Rebuild(재빌드)한다.

4. Build -> Profile을 선택한다.

5. Profile에서 원하는 값을 선택후 OK를 누른다.

6. 프로그램을 실행후 종료하면
Output창에 Profile이 선택되어 결과가 출력된다.


※ Window2000에서 profile 메뉴가 활성화되지 않는 문제점

Visual Studio가 설치될 때 Profile과 관련된 레지스트리 정보를 HKEY_CURRENT_USER 아래에 써넣는다. 그래서 Visual Studio를 설치할 때 사용했던 계정으로 로그인하지 않으면 profile이 활성화되지 않는다.

이를 해결하려면 VC를 설치할 때 접속했던 계정으로 로그인을 하던가, 아니면 레지스트리에 값을 써넣어주면 된다. 메모장으로 아래의 내용을 복사한후 *.reg파일로 저장한다.(파일이름은 상관없음)

    REGEDIT4
    [HKEY_LOCAL_MACHINE\Software\Microsoft\DevStudio\6.0\General]
    "ProfilerInstalled"=dword:1

이 파일을 더블클릭하면 레지스트리에 값이 써지고 VC에 profile 메뉴가 활성화된다.

이 정보는 MSDN에서 Q224382로 찾아보시면 되겠다.


수행시간 측정

1. clock()
ANSI C 함수이며 time.h에 정의되어 있어 UNIX/Linux에서도 잘 수행된다.
현 프로세스가 실행한지 얼마 되었는지에 대한 CPU 시간을 clock tick의 개수 단위로 반환해준다.

#include "time.h"

// 시작
clock_t beginTime;
clock_t endTime;
beginTime = clock();

// 작업 수행

// 수행 종료
endTime = clock();

// 값 출력
CString tmp = _T("");
tmp.Format("작업 수행 시간 - clock() : %5.3f",
           (double)(endTime - beginTime) / CLOCKS_PER_SEC); 

2. timeGetTime(), GetTickCount()
1/1000초 단위로 정확하게 제어할 수 있는 타이머가 바로 멀티미디어 타이머이다. 자세하게 말한다면 Timer Event Callback Notification 메커니즘을 적용하고 있는 타이머이다. 이 멀티미디어 타이머의 단점은 많이 사용할수록 시스템에 상당한 부하를 일으키며, 이외에 제대로 사용하지 못하면 예측할 수 없는 결과가 초래된다고 알려져있다. 이 타이머는 수행 시간 기준으로 일정한 시간이 되면 어떠한 행동을 취하는데 사용된다.
GetTickCount() 함수와 timeGetTime() 함수의 차이점은 운영체제의 정밀도에 차이가 있다. 예를 들어 GetTickCount()함수는 윈도우 9X에서는 기본으로는 약 55 밀리 초이지만, timeGetTime() 함수는 윈도우 9X에서는 1밀리 초이다. 따라서 부정확해질 수 있다. 그러므로 결국 timeGetTime()을 사용하는 게 유리하다. 다만 두 함수는 윈도우 2000, XP등 으로 올라갈수록 정밀도가 현격하게 벌어지게 된다. 따라서 최소의 타이머 해상도를 결정하는 timeBeginPeriod()함수와 timeBegindPeriod에 의해 만들어진 타이머 해상도를 제거하는 timeEndPeriod() 함수를 추가해 줌으로써 정밀도를 보정해 줄 수 있다. 정확한 시간을 구하지 않는 다는 가정 하에서는 두 함수 중에서 편한대로 선택한다.

#include "Mmsystem.h"
#pragma comment(lib,"winmm.lib")

// 시작
timeBeginPeriod(1);
DWORD tStart,tEnd;
tStart = timeGetTime();
// tStart = GetTickCount();

// 작업수행

// 수행 종료
tEnd = timeGetTime();
// tEnd = GetTickCount();
timeEndPeriod(1);

// 값 출력
CString tmp = _T("");
tmp.Format("작업 수행 시간 - timeGetTime() : %5.3f", (tEnd-tStart)/1000.0); 
 
3. QueryPerformanceCount()
초당 증가값을 주파수(frequency)라고 한다면, 그 값을 구하며 부팅 후 절대로 변하지 않는 방식을 적용한 QueryPerformanceCount() 함수는 7~8백만분의 1초까지 더 정밀하게 구하기 위해 사용한다.
 
// 시작
LARGE_INTEGER frequency, tStart, tEnd;
QueryPerformanceFrequency( &frequency );
QueryPerformanceCounter( &tStart );

// 작업 수행

// 수행 종료
QueryPerformanceCounter( &tEnd );
double tElpased =  \
(double)(tEnd.QuadPart - tStart.QuadPart)/(double)frequency.QuadPart;

// 값 출력
CString tmp = _T("");
    tmp.Format("작업 수행 시간 -  QueryPerformanceCounter() : %5.3f", tElpased); 

CRunTimeChk


위에서 소개한 clock,
QueryPerformanceCount
를 각각 사용해서 수행시간을 체크하는 클래스이다.


참고
CxImage를 이용한 Visual C++ 디지털 영상처리(정성호,이문호) - p.106
:
<자료>방송통신망 기반 IP-USN 통합 시험환경 구축 사업(08.9.~09.1)-현대HDS

<기사>NIA, 방송통신망 + IP-USN 선도 시험환경 구축(09.3.6)-현대HDS 컨소시엄

http://www.g-ipusn.or.kr
-> 국내 구축현황

http://k-m2m.co.kr


홈페이지가 곧 개편된다.

 







NIA본사 IPTV송출 테스트(대전 ICU, 광주 ETRI 장비)


테스트 장비
IP-USN 센서 장비(피코스넷, 한울, 아이비트)
Strix 무선메쉬(OWS)

SNP-1000(삼성테크윈IP카메라)

PLC(Power Line Communication·전력선통신)
IPTV 스트리밍 장비

구축내용
웹을 이용한 센서값 및 현장 영상 보기
구글맵 연동
IPTV 송출시스템 제어

: