Multimedia Programming 02: Play with Images

Slides:



Advertisements
Similar presentations
Company 사용자 인터페이스와 멀티미디어 2006 년 1 학기 컴퓨터의 개념 및 실습 Ver. 1.1.
Advertisements

YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
Computer Graphics 윈도우 프로그래밍 김 창 헌김 창 헌. Computer Graphics 2 윈도우 시스템  윈도우  스크린 위에서 독립적으로 움직일 수 있는 사각형 영역  윈도우 시스템  유저와 어플리케이션간의 그래픽 스크린을 통한 인터페이스 를.
사용자 인터페이스와 멀티미디어 2006년 2학기 컴퓨터의 개념 및 실습.
Efl을 이용한 타이젠 네이티브 웨어러블 앱 만들기
Vision System Lab, Sang-Hun Han
* 07/16/96 처음으로 배우는 C 프로그래밍 제1부 기초 제1장 시작하기 *.
03장 영상처리를 위한 Visual C++ 디지털 영상 파일 포맷 MFC 응용 프로그램 마법사를 이용한 MFC 프로젝트 작성
이정훈 전한배. 1. What is Image Processing? 2. Image Making 3. Application 4. OpenCV Outline.
Multimedia Programming 04: Point Processing Departments of Digital Contents Sang Il Park.
1. OpenCV 2.0 소개 및 설치 1.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
Implement of Input and Interaction
Introduction to Django
Linux/UNIX Programming APUE (The Environment of a UNIX Process)
Multimedia Programming 05: Point Processing
C++ Espresso 제1장 기초 사항.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
축산 인식개선을 위한 농협의 추진 사례 ( ) 농협중앙회 축산지원단장 박인희.
쉽게 풀어쓴 C언어 Express 제13장 구조체 C Express Slide 1 (of 25)
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
1. C 언어의 이해와 컴파일러 설치.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
Install & Simulation VLSI 시스템 설계
Internet Computing KUT Youn-Hee Han
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
OpenCV Presenter : 지왕태.
OpenGL Programming (II) 3D Graphics Fundamentals
Multimedia Programming 05: Point Processing
Multimedia Programming 04: 점, 선, 면
Kasimov C언어 세미나 1st.
Multimedia Programming 11: Histogram Equalization/ Image Halftoning
Red Color Detection Course ChanYoung Kim
Multimedia Programming 9: Text, Mouse Callback and Drawing
1 C 언어의 이해와 컴파일러 설치 프로그래밍 환경을 구축하자!.
CHAP 3:배열, 구조체, 포인터.
Multimedia Programming 11: Point Processing 6
Multimedia Programming 06: Point Processing3
자료 구조: Chapter 3 (2)구조체, 포인터
Sang Il Park Sejong University
Red Color Detection Course ChanYoung Kim
Chapter 1 디지털 영상처리의 개념.
Visual C++ Programming
Visual C++ Programming Output and File
Multimedia Programming 03: 점, 선, 면
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
HTML5+CSS3 실무 테크닉 김은기 저.
UniSQL/X 실습과제 (1) ■ 실습 기간: ~
OpenCV Tutorials Dongchul Kim Media System Lab., Yonsei University
헤더 파싱 ( Header Parsing ).
adopted from KNK C Programming : A Modern Approach
버퍼 (Buffer).
Chapter 2 Lexical Elements, Operators, and the C System
Multimedia Programming 10: Unsharp Masking/ Histogram Equalization
Computer Graphics OpenGL 설치 및 설정
컴퓨터 비전.
파피루스 사이트 웹기획서.
OpenCV 설치 및 구성 OpenCV
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Red Color Detection Course ChanYoung Kim
박정식 심규동 OpenCV 기초 박정식 심규동
Operating System Multiple Access Chatting Program using Multithread
3D Shapes 3개 핵심 Properties가 존재 1.Material 표면의 재질을 설정합니다.
PLEASE ENTER THE MAIN TITLE
문서 작성에 사용되는 기본태그 HR, PRE, B, I, U, S.
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
SQL Server Reporting Services Feature
C.
USB Drivers install Manual
Presentation transcript:

Multimedia Programming 02: Play with Images Departments of Digital Contents Sang Il Park

Outline OpenCV How to start Your first OpenCV code: HelloCV Basic Functions Image and Pixel Draw Lines or whatever you want Conclusion

What is OpenCV? OpenCV 의미: Open Source Computer Vision Library 500여개 이상의 함수와 알고리즘들: Computer vision Image processing (영상처리) 이외 일반적인 목적의 함수들 효율적이며 가볍다 (C/C++) Absolutely free!

Who did make this? 1999년부터 Intel 사가 개발 Available on Windows, Linux and MacOSX. 많은 회사들과 리서치 센터 등에서 폭넓게 사용 중 Home page: www.intel.com/technology/computing/opencv/

OpenCV 주된 활용 분야 Computer Human Interaction (HCI) Object Identification Segmentation and Recognition Face Recognition Gesture Recognition Motion Tracking Motion Understanding And so on.

프로그램 받는 곳 http://sourceforge.net/projects/opencvlibrary http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16937

OpenCV structure CV Image processing and vision algorithms HighGUI GUI, Image and Video I/O CXCORE basic structures and algoritms, XML support, drawing functions We will mostly focus on these two in this class

HelloCV: Your First OpenCV Code Loading an image and showing it

프로젝트 시작하기 Visual Studio 6.0 또는 Visual Studio .Net 시작 Make a new project Win32 Console Application Program Compile and run it! (Ctrl + F5)

OpenCV 초기 세팅 필요한 디렉토리 세팅 필요한 라이브러리 파일들 세팅: Includes: Libraries: "C:\Program Files\OpenCV\cv\include" "C:\Program Files\OpenCV\cxcore\include" "C:\Program Files\OpenCV\otherlibs\highgui“ Libraries: "C:\Program Files\OpenCV\lib“ 필요한 라이브러리 파일들 세팅: cv.lib cxcore.lib highgui.lib

1. 디렉토리 세팅 추가 파일 디렉토리 넣는 법 (toolsoptions): "C:\Program Files\OpenCV\cv\include" "C:\Program Files\OpenCV\cxcore\include" "C:\Program Files\OpenCV\otherlibs\highgui“

1. 디렉토리 세팅 라이브러리 디렉토리 세팅: (toolsoptions) "C:\Program Files\OpenCV\lib“

2. 라이브러리 파일들 세팅 필요한 라이브러리 파일들: cv.lib cxcore.lib highgui.lib

준비 끝! 프로그램 소스 코드 앞에 다음을 추가하면 OpenCV를 사용할 준비가 끝난다. #include <cv.h> #include <cxcore.h> #include <highgui.h>

HelloCV http://dasan.sejong.ac.kr/~sipark/class2008/mm/code/ hellocv.cpp Type this: #include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> int _tmain(int argc, _TCHAR* argv[]) { IplImage * img; img = cvLoadImage("d:\\test.jpg"); cvNamedWindow("HelloCV"); cvShowImage("HelloCV", img); cvWaitKey(); cvDestroyWindow("HelloCV"); cvReleaseImage(&img); return 0; }

Error 가 발생한다면? dll 파일을 복사하여 넣자 from: C:\Program Files\OpenCV\bin To: 현재 프로젝트 내의 debug folder

HelloCV

HelloCV IplImage cvLoadImage cvReleaseImage cvNamedWindow cvShowImage http://dasan.sejong.ac.kr/~sipark/class2008/mm/code/ hellocv.cpp #include "stdafx.h" #include <cv.h> #include <cxcore.h> #include <highgui.h> int _tmain(int argc, _TCHAR* argv[]) { IplImage * img; img = cvLoadImage("d:\\test.jpg"); cvNamedWindow("HelloCV"); cvShowImage("HelloCV", img); cvWaitKey(); cvDestroyWindow("HelloCV"); cvReleaseImage(&img); return 0; } IplImage cvLoadImage cvReleaseImage cvNamedWindow cvShowImage cvDestroyWindow cvWaitKey

OpenCV에서의 이미지란? IplImage 구조체 Image의 포멧 (크기, 칼라/흑백 등등) 실제 이미지 정보 (각 점의 색)

구조체 (structure) ? 하나의 물건(객체)가 여러 요소로 구성되어 있을때 효율적으로 표현하기 Example) 학생: 이름, 학번, 주소, 전화번호,… 성적: 국어점수, 수학점수, 영어점수, 총점, 평균 구조체: 관련된 정보를 그룹화하여 표현

구조체 (structure) 구조체: 관련된 정보를 그룹화하여 표현 구조체 이름 학생 이름 학번 주소 전화번호 멤버 변수

구조체의 정의 Example) struct student { char name[30]; int number; float grade; };

멤버로의 접근 구조체변수이름.맴버변수이름 struct score { int korean; int math; }; score a; a.korean = 30; a.math = 80;

Image structure (이미지 구조체) IplImage (Image Processing Library) typedef struct _IplImage { int nSize; /* size of iplImage struct */ int ID; /* image header version */ int nChannels; int alphaChannel; int depth; /* pixel depth in bits */ char colorModel[4]; char channelSeq[4]; int dataOrder; int origin; int align; /* 4- or 8-byte align */ int width; int height; struct _IplROI *roi; /* pointer to ROI if any */ struct _IplImage *maskROI; /*pointer to mask ROI if any */ void *imageId; /* use of the application */ struct _IplTileInfo *tileInfo; /* contains information on tiling*/ int imageSize; /* useful size in bytes */ char *imageData; /* pointer to aligned image */ int widthStep; /* size of aligned line in bytes */ int BorderMode[4]; /* the top, bottom, left, and right border mode */ int BorderConst[4]; /* constants for the top, bottom,left, and right border */ char *imageDataOrigin; /* ptr to full, nonaligned image */ } IplImage;

Image I/O (이미지 입출력) IplImage* cvLoadImage(image_path, colorness_flag); 파일로 부터 이미지를 읽는다. 성공할 경우 메모리가 생성되고 IplImage pointer를 반환 실패할 경우 NULL 값을 리턴 읽으면서 이미지의 포멧을 설정할 수 있다. #define CV_LOAD_IMAGE_COLOR 1 #define CV_LOAD_IMAGE_GRAYSCALE 0 #define CV_LOAD_IMAGE_UNCHANGED -1  DEFAULT cvSaveImage(image_path, image); 이미지를 파일로 저장한다. 형식은 확장자로 부터 결정 cvReleaseImage(image_path, image); 이미지를 저장하고 있던 메모리를 해제한다. BMP, JPEG, PNG, TIFF, PPM/PGM 포멧등이 지원됨

Image I/O (이미지 입출력) 이미지의 포멧을 바꾸어 저장하기 예: IplImage* img = cvLoadImage(“picture.jpg”); if( img ) cvSaveImage( “picture.bmp”, img );

Windows cvNamedWindow(window_name); 윈도우를 생성한다. 윈도우는 이름을 부여할 수 있고, 각 이름을 기준으로 구분한다. cvNamedWindow(“ViewA”); cvMoveWindow(“ViewA”,300,100); cvDestroyWindow(“ViewA”); … cvShowImage(window_name, IplImage *); 주어진 이름에 해당하는 윈도우에 이미지를 보여준다. 한 이미지만을 보여 줄 수 있으며, 부분 적인 출력은 하지 못한다. cvDestroyWindow(window_name); 주어진 이름에 해당하는 윈도우를 없앤다.

User Input int cvWaitKey( int delay=0 ) 사용자가 키를 누르기를 정해진 대기시간 만큼 기다린다. 대기시간이 초과되면 다음 명령을 수행한다. 대기시간으로 0을 설정하면 영원히 기다린다. 시간의 값은 millisecond  대기시간을 이용하면 애니메이션을 만들 수 있다. 활용예) 두 개 이상의 그림을 교대로 보여줌

What else HighGUI can do? “Smart” windows Image I/O, rendering Processing keyboard and other events, timeouts Trackbars Mouse callbacks Video I/O

Image and Pixel

픽셀(Pixel: Picture Element) 이미지:픽셀의 집합 비트맵(Bitmap)

픽셀 픽셀의 색: 적색(Red), 녹색(Green), 청색(Blue) 컬러의 수  픽셀 당 비트 수(밝기 레벨)

Pixel의 값 = (위치, 색) x y 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System) 색 : CvScalar (색을 저장하는 구조체) x y (0,0) (8,2)

색을 저장하는 변수: CvScalar 4 개 이하의 숫자를 저장할 수 있도록 만든 구조체 0번은 blue, 1번은 green, 2번은 red 값을 저장 Example) CvScalar s; s.val[0] = 200; (Blue) s.val[1] = 11; (Green) s.val[2] = 123; (Red) struct CvScalar { double val[4]; };

이미지에서 Pixel값으로의 접근 CvScalar cvGet2D (IplImage*, y, x) (x,y)에서의 칼라 값 얻기. Example) CvScalar s; s = cvGet2D(img, 30, 40); void cvSet2D (IplImage*, y, x, CvScalar) (x,y)에서의 칼라 값 변경 Example) CvScalar s = cvScalar(100,0,0); cvSet2D(img, 30, 40, s); 또는 cvSet2D(img, 30, 40, cvScalar(100,0,0));

빈 이미지 생성하기 IplImage* cvCreateImage( CvSize size, int depth, int channels ); 만들 빈 이미지의 크기, 허용 색상수를 설정하여 생성 컬러수: color depth: IPL_DEPTH_8U (각 채널당 8bit) channels: 1,2,3,4 (1=grey, 3=color) Example) IplImage * img; img = cvCreateImage(cvSize(200,100), IPL_DEPTH_8U,3); cvSet(image, CvScalar) 이미지를 주어진 색으로 가득 칠한다 Example) cvSet(img, CV_RGB(255,255,255));

So far what you’ve learned: IplImage cvLoadImage (file_name) cvCreateImage (size, depth, channels) cvSaveImage (file_name, image) cvReleaseImage (image) cvNamedWindow (window_name) cvShowImage (window_name, image) cvDestroyWindow (window_name) cvWaitKey (delay) cvGet2D (image, y, x) cvSet2D (image, y, x, cvScalar)

Put everything together! HelloCV2.cpp int _tmain(int argc, _TCHAR* argv[]) { IplImage * img; img = cvLoadImage("d:\\test.jpg"); cvNamedWindow("HelloCV"); cvShowImage("HelloCV", img); cvWaitKey(); int x,y; for(x=0; x<100; x++) for(y=0; y<100; y++) CvScalar s = cvGet2D(img, y,x); s.val[0] +=50; s.val[1] +=50; s.val[2] +=50; cvSet2D(img,y,x,s); } cvDestroyWindow("HelloCV"); cvReleaseImage(&img); return 0;

A Simple Function: Line Drawing Horizontal line drawing: void DrawHLine (IplImage * img, int y, int st, int ed, CvScalar color) image

Do more! Design a function that draws a rectangle (x,y) w Design a function that draws a rectangle void DrawRectangle (IplImage * img, int x, int y, int w, int h, CvScalar color) Don’t forget to make sure a pixel is inside the image 0 <= max_x <= img->width 0 <= max_y <= img->height If done, try to draw 50 random boxes with random colors! h

For those who want more OpenCV Wiki-pages: http://opencvlibrary.sourceforge.net For HighGUI: http://opencvlibrary.sourceforge.net/HighGui For cxcore: http://opencvlibrary.sourceforge.net/CxCore Supplied documentation: OpenCV/docs/index.htm, faq.htm A Korean Community: http://www.opencv.co.kr/