Presentation is loading. Please wait.

Presentation is loading. Please wait.

Multimedia Programming 03: 점, 선, 면

Similar presentations


Presentation on theme: "Multimedia Programming 03: 점, 선, 면"— Presentation transcript:

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

2 Outline Review OpenCV 익숙해 지기

3 Review Open CV 설치하기 IplImage

4 HelloCV IplImage cvLoadImage cvReleaseImage cvNamedWindow cvShowImage
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

5 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;

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

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

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

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

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

11 Image and Pixel

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

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

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

15 색을 저장하는 변수: 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]; };

16 이미지에서 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를 정보를 참조할것)

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

18 생각해 보기: Sepia image 만들기

19 빈 이미지 생성하기 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));

20 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)

21 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;

22 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

23 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

24 For those who want more OpenCV Wiki-pages: For HighGUI: For cxcore: Supplied documentation: OpenCV/docs/index.htm, faq.htm A Korean Community:

25 Program Assignment #1 Long long times ago in Russian Empire
Sergei Mikhailovich Prokudin-Gorskii ( ) A man who pursuing a colorful future in 1907

26 Program Assignment #1 His invention A camera His camera

27 Program Assignment #1 His pictures with the current digital technology

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

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

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


Download ppt "Multimedia Programming 03: 점, 선, 면"

Similar presentations


Ads by Google