Multimedia Programming 03: 점, 선, 면

Slides:



Advertisements
Similar presentations
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++ 통합 환경 들어가기.
Advertisements

재료수치해석 HW # 박재혁.
이정훈 전한배. 1. What is Image Processing? 2. Image Making 3. Application 4. OpenCV Outline.
Chapter04 캔버스(2) HTML5 Programming.
Multimedia Programming 04: Point Processing Departments of Digital Contents Sang Il Park.
1. OpenCV 2.0 소개 및 설치 1.
Implement of Input and Interaction
Multimedia Programming 05: Point Processing
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
C++ Espresso 제1장 기초 사항.
Image & Video processing
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
축산 인식개선을 위한 농협의 추진 사례 ( ) 농협중앙회 축산지원단장 박인희.
Chapter 6. 리눅스 백도어 황 선 환.
제 9 장 구조체와 공용체.
11장 구조체와 열거형 구조체의 정의 구조체 변수의 선언 구조체 초기화 및 사용 구조체 재정의 포인터를 이용해서 구조체 사용
OpenGL Programming (II) 3D Graphics Fundamentals
Multimedia Programming 05: Point Processing
Multimedia Programming 04: 점, 선, 면
자료 구조: Chapter 3 (2)구조체, 포인터
Multimedia Programming 11: Histogram Equalization/ Image Halftoning
조 병 규 Software Quality Lab. 한국교통대학교
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Red Color Detection Course ChanYoung Kim
Multimedia Programming 9: Text, Mouse Callback and Drawing
Multimedia Programming 25: Playing with Video
Multimedia Programming 11: Point Processing 6
Multimedia Programming 06: Point Processing3
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
Red Color Detection Course ChanYoung Kim
C / C++ Programming in multi platform
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Raster 애니메이션은 GIF Animator로 만들면 쉽다
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Multimedia Programming 10: Point Processing 5
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
Multimedia Programming 02: Play with Images
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
홈페이지용 그림 활용법 그림 삽입 태그 <IMG> 배경 그림 다루기 그림과 문자열의 어울림
Multimedia Programming 06: Point Processing 2
프로그래밍 랩 – 7주 리스트.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
컴퓨터 프로그래밍 : 실습3 2장 데이터와 식.
11장. 1차원 배열.
Opencv 이민권.
OpenCV Tutorials Dongchul Kim Media System Lab., Yonsei University
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
adopted from KNK C Programming : A Modern Approach
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Multimedia Programming 10: Unsharp Masking/ Histogram Equalization
OpenCV 설치 및 구성 OpenCV
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
LCD Controller Colorbar
24장. 파일 입출력.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Red Color Detection Course ChanYoung Kim
OPENCV를 이용한 이미지처리 정은일 멀티미디어설계
박정식 심규동 OpenCV 기초 박정식 심규동
2일차 영상처리 교육.
문서 작성에 사용되는 기본태그 HR, PRE, B, I, U, S.
구조체(struct)와 공용체(union)
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
어서와 C언어는 처음이지 제21장.
C.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
Chapter 11. 문서 인쇄 및 파일 형식.
Presentation transcript:

Multimedia Programming 03: 점, 선, 면 Departments of Digital Contents Sang Il Park

Outline Review OpenCV 익숙해 지기 점 선 면

Review Open CV 설치하기 IplImage

HelloCV IplImage cvLoadImage cvReleaseImage cvNamedWindow cvShowImage http://dasan.sejong.ac.kr/~sipark/class2010/mm/code/ hellocv.cpp #include <cv.h> #include <cxcore.h> #include <highgui.h> int main() { IplImage * img; img = cvLoadImage(“c:\\test.jpg"); cvNamedWindow("HelloCV"); cvShowImage("HelloCV", img); cvWaitKey(); cvDestroyWindow("HelloCV"); cvReleaseImage(&img); return 0; } IplImage cvLoadImage cvReleaseImage cvNamedWindow cvShowImage cvDestroyWindow cvWaitKey

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); 파일로 부터 이미지를 읽는다. 성공할 경우 메모리가 생성되고 IplImage pointer를 반환 실패할 경우 NULL 값을 리턴 cvSaveImage(image_path, IplImage *); 이미지를 파일로 저장한다. 형식은 확장자로 부터 결정 cvReleaseImage(IplImage **); 이미지를 저장하고 있던 메모리를 해제한다. BMP, JPEG, PNG, TIFF, PPM/PGM 포멧등이 지원됨

Image I/O (이미지 입출력) 이미지의 포멧을 바꾸어 저장하기 예: IplImage* img = cvLoadImage(“picture.jpg”); if( img != NULL ) 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)); 주의: 반드시 x,y는 이미지 범위 내부에 있어야함! (image의 width와 height를 정보를 참조할것)

코딩연습 이미지의 일부를 Gray-scale image로 만들기 Gray 이미지: 각 픽셀마다 R, G, B 값이 모두 같은 이미지 칼라 이미지의 각 pixel의 R, G, B 값으로 부터 대표값(=평균값)을 얻는다 더 생각해 볼 문제: 이미지의 일부를 흑백 이미지로 만들기

생각해 보기: Sepia image 만들기

빈 이미지 생성하기 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), 8,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 main() { IplImage * img; img = cvLoadImage(“c:\\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;

Coding Practice: Line Drawing Make your own function for 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/

Program Assignment #1 Long long times ago in Russian Empire Sergei Mikhailovich Prokudin-Gorskii (1863-1944) A man who pursuing a colorful future in 1907 http://www.loc.gov/exhibits/empire/

Program Assignment #1 His invention A camera His camera

Program Assignment #1 His pictures with the current digital technology

Program Assignment #1 Recover the colorful world in 1907 by yourself! align G R

Program Assignment #1 홈페이지에 4개의 예제 그림이 있음: http://dasan.sejong.ac.kr/~sipark/class2010/mm/ 숙제 기한: Sep.17 PM 23:59 (금요일) Email 제출 : sipark@sejong.ac.kr Report ( doc, hwp, pdf) Source code (cpp 파일) 복수개의 파일(h 파일 포함)이 필요 하다면 첨부할 것 점수: 주석 및 리포트: 20 Color 이미지가 나온다: 40 자동으로 그림이 맞추어 진다: 40

연습시간 매주 화요일 저녁 6시 단, 오늘은 6시 30분