Notice»

Recent Post»

Recent Comment»

Recent Trackback»

Archive»

« 2024/3 »
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
31

 

'프로그래밍/영상, 음성'에 해당되는 글 5

  1. 2009.08.19 OpenCV(ComputerVision) 기본편 1
  2. 2009.08.19 CxImage
  3. 2009.07.23 GDI+ (& CImage)
  4. 2009.07.20 영상처리 관련 조언, 책들...
  5. 2009.04.16 IJL(Intel Jpeg Library) 1
 
현재 2009년 7월 기준으로 최신 버젼은 1.1pre1이다.
아직 정식버젼이 아니고 '오픈소스 OpenCV를 이용한 컴퓨터 비전 실무 프로그래밍' 책을 기준으로 정리하므로 1.0을 기준으로 정리한다.

http://sourceforge.net/projects/opencvlibrary/ - 소스포지
http://opencv.willowgarage.com/wiki/ - OpenCV Wiki(문서)
http://tech.groups.yahoo.com/group/opencv/ - 야후 그룹스
http://www.opencv.co.kr/  - 우리나라 최대 커뮤니티
http://opencv.jp

oepncv.jp의 docs- 번역해서 한글로 보기
OpenCV docs - 검색가능
OpenCV docs - conv2(설치폴더의 docs)

다운로드
http://sourceforge.net/projects/opencvlibrary/files/ 에서 open-cv -> 1.0 -> OpenCV_1.0.exe를 다운받는다.

설치
받은 파일을 실행해서 설치한다. 기본설정은 C:\Program Files\OpenCV으로 되어있으며 설치파일은
폴더를 환경변수에 Path등록과 bin폴더안에 calibfilter.ax,proxytrans.ax,syncfilter.ax 3개의 Activex를 등록한다.
registerall.bat를 이용하면 엑티브엑스 3개는 자동등록된다.

사용하기

1. 디버깅정보를 얻기위해서 다시 컴파일 해야된다. 설치폴더안에 _make폴더에서 opencv.dsw를 실행한다.

* Batch Build에서 필요한것만 체크하자.

cvaux.h파일의 1137 Line에서 주석처리를 잘못해서 에러가 난다.
//수정전
   CvMemStorage*   storage;      /*storage for 밼oreground_regions\/              \
//수정후
   CvMemStorage*   storage;      /*storage for Foreground_regions*/                \
위와같이 변경하고 컴파일하면 성공.


2. VC개발환경에 OpenCV의 헤더파일, 라이브러리 폴더를 설정해준다.

Tool -> Option -> Directory

Include에
C:\PROGRAM FILES\OPENCV\CV\INCLUDE
C:\PROGRAM FILES\OPENCV\CVAUX\INCLUDE
C:\PROGRAM FILES\OPENCV\CXCORE\INCLUDE
C:\PROGRAM FILES\OPENCV\ML\INCLUDE
C:\PROGRAM FILES\OPENCV\OTHERLIBS\CVCAM\INCLUDE
C:\PROGRAM FILES\OPENCV\OTHERLIBS\HIGHGUI

Library에
C:\PROGRAM FILES\OPENCV\LIB


3. DLL 구성

DLL파일은 총 7개이고 C:\Program Files\OpenCV\bin에 존재한다.
환경변수로 설정했을 경우 사용자는 배포시에만 필요 dll을 포함하면된다.

보통 3~5개의 dll이 사용되며
영상을 읽고, 변환하고, 보여주는 함수만 사용하면 cv100.dll, cxcore100.dll, highgui100.dll만 있으면된다.

53Page

libquide40.dll은 OpenMP라이브러리이다.

샘플프로그램
설치폴더에 samples\c에 존재하며 이와는 다르게 tests라는 폴더는 cv,cxcore라이브러리 내 주요 함수를 검증하기 위한 테스트 코드도 존재한다.


55Page

CvvImage 클래스

highgui.h에 선언되어 있다. 유일하게 dc를 사용하는 클래스.

193Page

MS VS2003부터 ATL에 Cimage라는 클래스가 추가되었으며 CvvImage와 구조가 비슷하다.
CImage는 C#의 그래픽 엔진인 GDI+를 Wrapping한 클래스이다.

CImage - MSDN

GDI+ (& CImage) - 99%의 정리

코너, 외곽선, 에지 설명(p.142)

정성호,이문호님의 책 예제
※ 소스삭제 -> 소스는 저작권이 있으므로 책을 사서 정리된 내용을 참고하시길..

ConsoleCV First.zip

-> Chapter1까지의 간단예제

ConsoleCV.zip

-> Chapter2와 Chapter6(cvcam)의 첫부분 예제. 함수마다 페이지를 적어놨음.

OpenMFC MFC첫 사용예제(4장).zip

-> Chapter4. MFC 처음 사용예제( CvvImage를 이용한 영상 읽기,저장,출력<From DC>, 클립보드<DIB>, 로그창)

OpenMFC_5장.zip

-> Chapter5 예제(RGB 컬러공간분리, 공간영역필터링<필터기술>, HBitmap으로 변환후 Picture컨트롤에 출력, CvvImage버퍼를 이용한 취소,복원기술)

OpenMFC_6장.zip

-> Chapter6 예제(cvcam를 사용, facedetect예제와 ConsoleCV의 간단 예제를 이용해서 얼굴 추출을 구현한 예제)

facedetect.zip

-> 얼굴추출소스<444Page>, 6장 예제의 기본소스
(OpenCV 기본 Sample폴더에 있는 facedetect예제에 저자가 주석을 달아서 정리한것이다.)


참고
오픈소스 OpenCV를 이용한 컴퓨터 비전 실무 프로그래밍 : 기본편 - 정성호,이문호 저
http://www.conv2.com/ - 이문호님 홈페이지(OpenCV)

opencvGIF
-> OpenCV 에는 GIF가 없다. 적용하고 싶을때 사용.

Easy to use Wrapper (DLL) for Intel's OpenCV Library with Examples
-> C#용 Wrapper DLL

c#으로 OpenCV하기 카페


VC의 Profiling(프로파일링) 사용과 수행시간 측정 함수사용법(CRunTimeChk)
-> CxImage책의 p.106을 참고. OpenCV책의 p.266을 보면 OpenCV 라이브러리를 이용한 방법도 소개하고 있다.

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

CxImage  (0) 2009.08.19
GDI+ (& CImage)  (0) 2009.07.23
영상처리 관련 조언, 책들...  (0) 2009.07.20
IJL(Intel Jpeg Library)  (1) 2009.04.16
:

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
:

GDI+ (& CImage)

프로그래밍/영상, 음성 | 2009. 7. 23. 10:24 | Posted by 99%
http://www.winapi.co.kr/project/library/gdiplus/gdiplus.htm
아래내용은 김상형님의 WinApi사이트 내용을 정리한것이다. GDI+는 다른 책도 봤지만 김상형님 강좌만한게 없다.
GpExam2008.zip(4.8MB)



GDI+ 소개

 GDIPlus는 닷넷의 그래픽 출력 엔진이다. 20년전에 C함수들로 설계된 GDI와는 다르게 C++클래스로 설계되었으며 XP이후에는 기본 출력엔진 역활을 한다. DLL파일 하나로 구성되어 있으며 C++컴파일러에서도 사용할 수 있어 C++사용자들은 GDI만으론 부족했던 부분을 GDI+를 사용으로 해결할 수 있게 되었다. (VC6사용자는 플랫폼 SDK설치를 하면 사용가능)
C#에서는 GDI+기본 클래스의 내용에 몇가지를 더하고 C#의 특성을 살려 C++보다는 좀더 편하게 사용할 수 있지만 다양한 그래픽 포맷으로 인해 외부 라이브러리를 찾아쓰던 VC사용자들에겐 적극 추천할 만한 라이브러리이다.

참고로 C#의 구조를 GTK#으로 구현하여 오픈소스화고 있는 Mono프로젝트에서의 그래픽 엔진은 윈도우에선 GDIPlus를 사용하고 Linux등에선 자체 GDIPlus같은 엔진을 만들어 사용하고 있다. C#을 사용해 보신분이라면 Mono를 사용해 한번쯤 리눅스 프로그래밍을 해보는것도 좋은 경험이라 생각한다. 참고 Mono의 System.Drawing.

GDI+ - MSDN

GDI+ 사용하기

VC에서 사용하기 위해선 GDIPlus초기화 과정이 필요하다. 아래 소스로 헤더파일 선언과 GDI+초기화 과정을 간단하게 정리했으며 CGdiPlusStarter g_gps;를 위치와 상관없이 전역변수로 선언해놓으면 초기화와 해제과정을 자동으로 처리해준다. 배포시는 gdiplus.dll을 같은 폴더에 포함하기만 하면 95/98에서도 문제없이 사용할 수 있다.
#include <gdiplus.h>
using namespace Gdiplus;
#pragma comment(lib, "gdiplus")

class CGdiPlusStarter
{
private:
     ULONG_PTR m_gpToken;
public:
     bool m_bSuccess;
     CGdiPlusStarter() {
          GdiplusStartupInput gpsi;
          m_bSuccess=(GdiplusStartup(&m_gpToken,&gpsi,NULL) == Ok);
     }

     ~CGdiPlusStarter() {
          GdiplusShutdown(m_gpToken);
     }
};

CGdiPlusStarter g_gps;

참고사이트

CodeProject GDI+
-> General Graphics 섹션에도 GDI+사용 예제가 많다.

In Memory Image Compression

초보자를 위한 GDI+이미지 변환, DLL에서 클래스 익스포트 예제/라이브러리
-> GDI+이미지 변환 및 wstring & string 변환, dll과 static라이브러리를 같은 소스로 만드는 방법, 스마트 포인터와 관련된 VC++의 COM Support 등의 내용을 담고 있는 예제.

GDI+ 속도

.Net이 속도로 인해 GDIPlus라는 C++클래스 라이브러리를 만들었지만 GDI와 비교하면 확실히 속도는 떨어진다. 하지만 GDI+의 이미지 처리 클래스라던가 반투명 출력등의 기능은 GDI에는 없는 기능이고 이미지 출력같은 경우는 속도차이가 많이 나지 않는다. 그러므로 출력 품질을 위해서라도 GDI와의 연동하는 법을 배워 필요한곳에 적절히 사용하도록 하자.
아래에 GDI와 MFC, GDI+의 그래픽 처리 예제를 첨부했으며 예제를 실행해보면 시스템에따라 5~10배정도의 차이가 나고 출력부분을 반투명 처리할 경우는 700배정도의 차이가 난다.(위설명은 winapi사이트에 있는 그대로인데 필자의 시스템에선 GDI와 GDI의 차이가 2배 밖에 나지 않았다.)

GDI+ 요점

GDI+는 유니코드를 사용한다.

Status 열거형 (2. 나 참고)

GDI+의 모든 함수들은 Status 열거형으로 실행 결과를 리턴한다. 생성자로 로딩하는 Image 클래스의 에러 코드는 최후의 실패한 에러 코드를 리턴하는 GetLastStatus 함수를 사용하자. GdiPlusEnums.h 참고.

Rect
(2. 다 참고)
GDI의 RECT 구조체는 LTRB 형식으로 좌상단, 우하단 좌표로 영역을 지정하지만 GDI+ Rect 클래스는 X, Y 좌상단 좌표와 폭, 높이인 Width, Height를 멤버로 가진다. 그래서 똑같은 (10,20)-(150,100)의 영역을 표현하는 방식이 다르다.



Color (3. 가 참고)
GDI+는 색상을 Color 클래스로 표현한다. Color 클래스는 32비트의 정수로 색상을 관리하는데 8비트씩 잘라 A,R,G,B 요소를 표현한다. R,G,B는 각각 빨간색, 초록색, 파란색의 강도를 지정하며 A는 불투명도인 알파를 지정한다. 알파가 0이면 완전히 투명해서 보이지 않는 상태이며 255이면 불투명한 상태이다.

표준색상 - Color.Blue는 C#의 프로퍼티

Color Blue(0,0,255);
Pen P(Blue);
G.DrawEllipse(&P,10,10,100,100);

위 코드를 줄이면

G.DrawEllipse(&Pen(Color(0,0,255)),10,10,100,100);

처럼 만들수 있으나 C#으론

G.DrawEllipse(Pens.Blue,10,10,100,100);

이렇게 끝낼 수 있다. C#의 문법을 이용해서 몇가지 편리한 클래스가 제공되는데 아쉽게도 C++에서 따라하기엔 저렇게 간결한 문장을 만들긴 어려운 편이다.

이상이 Winapi사이트 '3.나' 까지의 정리이다.




CImage

VC.Net 툴이상(VC 7.0)을 사용하면 "atlimage.h"안에 CImage라는 기본클래스가 존재하며 여러가지 기본포맷을 CBitmap으로 간단하게 가져올 수 있다. 이 클래스는 GDIPlus를 Wrapping한 클래스이며 클래스안에 CInitGDIPlus라는 GDIPlus초기화 클래스로 CImage의 Load함수만 호출하면 내부에서 CGdiPlusStarter 클래스와 같은 일을 자동으로 처리해준다.

CImage(MSDN)

사용예제(MSDN)

사실 위 예제도 필요없으며 아래 처럼 7.0이상이면 헤더파일 선언만으로 간단히 사용가능하며 배포시에도 gdiplus만 사용할때와 같다.
#include "atlimage.h"

// Load
CImage imgae;
imgae.Load(_T("C:\\1.jpg"));

// Draw
CClientDC dc(this);
imgae.Draw(dc,0,0,100,100);

// CBitmap으로 가져오기
CBitmap* pBitmap = CBitmap::FromHandle(image.Detach());
Image클래스처럼 유니코드를 사용할 필요도 없으며 간단히 사용가능 하지만 하나를 배우면 주의사항 또한 늘어나는 법이다.

이전 운영 체제에서 CImage 제한(MSDN)
http://msdn.microsoft.com/ko-kr/library/cc468120(VS.71).aspx

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

OpenCV(ComputerVision) 기본편  (1) 2009.08.19
CxImage  (0) 2009.08.19
영상처리 관련 조언, 책들...  (0) 2009.07.20
IJL(Intel Jpeg Library)  (1) 2009.04.16
:
이문호님의(conv2) 글과 책

책 - 영상처리 전문가를 꿈꾸는 당신에게

영상 포맷 처리가 과연 어려울까?
이런 영상 처리 소스가 필요하니 달라?
상처리를 공부할만한 책을 소개해달라?
짓밟힌 공개 개발자의 꿈
영상처리를 시작하려는 분들께...
영상처리를 공부하려면 어떻게 해야 할까요?








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

OpenCV(ComputerVision) 기본편  (1) 2009.08.19
CxImage  (0) 2009.08.19
GDI+ (& CImage)  (0) 2009.07.23
IJL(Intel Jpeg Library)  (1) 2009.04.16
:

IJL(Intel Jpeg Library)

프로그래밍/영상, 음성 | 2009. 4. 16. 01:28 | Posted by 99%

소개

IJL(Intel JPEG Library)는 Intel에서 만든 JPEG 용 라이브러리로 Intel CPU에 최적화되어 Intel CPU에서 최적의 성능을 나타낸다. IJL 1.5 버젼까지 공개용이며 현재는 Intel에서 IJL에 대한 공식적인 지원은 하지 않고 IIPP의 일부로 포함되어 판매되고 있다. IIPP는 인텔에서 제공하는 여러 라이브러리(IPL, IJL, SPL,..)등을 하나로 통합한 것이다. 그러나 JPEG 이미지의 encoding/decoding용으로는 IJL1.5버젼에서도 충분히 그 효과적인 성능을 얻을 수 있다.

필자 테스트 결과 1.51버젼에 메모리릭 문제가 발생했다. 혹자는 포함(static)만 발생한다고 하는데 필자는 dll을 사용해도 발생했다. 고로 ijl최신버젼을 공짜로 사용하면 메모리릭이 발생한다. 필자는 현재 1.1버젼을 사용중이다. 몇가지 define선언관련이 변경된것 말고는 사용상의 문제는 없었다.

Intel® Integrated Performance Primitives

Intel® Integrated Performance Primitives - Samples License Agreement


Intel’s JPEG Library - Dr. Dobb's Journal July, 2002

설치

1.5를 설치하면 IJL관련 샘플이나 DLL등이 설치되며 doc문서를 참조하면 간단한 소스도 존재한다. C++,VB,Delphi 예제포함.

IJL 1.1(DLL)


IJL 1.5설치파일


참조
Intel JPEG Library v1.5 (Latest Update)
IJL(Intel Jpeg Library) 2.0  - 김대석님이 Intel IPP 5.1을 이용해서 만들어낸 IJL 2.0

사용예제


DirectShow를 이용 캠으로 부터 영상을 받아와 UDP로 1:1연결후 영상을 서로 보여주는 간단 화상채팅소스이다.
CJpegInfo라는 ijl라이브러리를 이용해서 DIB로 버퍼를 가져와서 사용하는 Wrapper 클래스가 있다.
(출처를 모름 ㅡ.ㅡ;)

CIJL (99%'s Code)

CJpegInfo와 IJL문서를 참조하여 만든 라이브러리. 급하게 프로젝트에 사용하느라 예외처리는 없다. 지속적으로 업데이트 예정.

참고

이미지(Jpeg) 고속 처리시는 CxImage사용 금지! IJL(Intel jpeg library)사용.


C++ builder 환경에서 IJL(Intel JPEG Library) 사용 방법


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

OpenCV(ComputerVision) 기본편  (1) 2009.08.19
CxImage  (0) 2009.08.19
GDI+ (& CImage)  (0) 2009.07.23
영상처리 관련 조언, 책들...  (0) 2009.07.20
: