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

Multimedia Programming 03: 점 , 선 , 면

  • Upload
    dillon

  • View
    169

  • Download
    0

Embed Size (px)

DESCRIPTION

Multimedia Programming 03: 점 , 선 , 면. Departments of Digital Contents Sang Il Park. Review: OpenCV 초기 세팅. 필요한 디렉토리 세팅 Includes: "C:\ OpenCV-2.3.0 \include" Libraries: "C:\ OpenCV-2.3.0 \lib“ 필요한 라이브러리 파일들 세팅 : opencv_core230.lib opencv_imgproc230.lib opencv_highgui230.lib. - PowerPoint PPT Presentation

Citation preview

Page 1: Multimedia Programming 03: 점 ,  선 ,  면

Multimedia Programming 03:

점 , 선 , 면Departments of Digital

ContentsSang Il Park

Page 2: Multimedia Programming 03: 점 ,  선 ,  면

Review: OpenCV 초기 세팅

1. 필요한 디렉토리 세팅– Includes:

• "C:\OpenCV-2.3.0\include"

– Libraries:• "C:\OpenCV-2.3.0\lib“

2. 필요한 라이브러리 파일들 세팅 :– opencv_core230.lib– opencv_imgproc230.lib– opencv_highgui230.lib

Page 3: Multimedia Programming 03: 점 ,  선 ,  면

Today, we will learn:

• IplImage 구조체• OpenCV 익숙해 지기– 점– 선– 면

Page 4: Multimedia Programming 03: 점 ,  선 ,  면

HelloCV

#include <opencv2/opencv.hpp>

int main(){

IplImage * img;img = cvLoadImage(“c:\\test.jpg");

cvNamedWindow("HelloCV");cvShowImage("HelloCV", img);

cvWaitKey();

cvDestroyWindow("HelloCV");cvReleaseImage(&img);

return 0;}

http://dasan.sejong.ac.kr/~sipark/class2011/mm/code/hellocv.cpp

• IplImage

• cvLoadImage• cvReleaseImage

• cvNamedWindow

• cvShowImage• cvDestroyWindo

w

• cvWaitKey

Page 5: Multimedia Programming 03: 점 ,  선 ,  면

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

Page 6: Multimedia Programming 03: 점 ,  선 ,  면

구조체 (structure) ?

• 하나의 물건 ( 객체 ) 가 여러 요소로 구성되어 있을때 효율적으로 표현하기

• Example) – 학생 : 이름 , 학번 , 주소 , 전화번호 ,…– 성적 : 국어점수 , 수학점수 , 영어점수 , 총점 , 평균

구조체 : 관련된 정보를 그룹화하여 표현구조체 : 관련된 정보를 그룹화하여 표현

Page 7: Multimedia Programming 03: 점 ,  선 ,  면

구조체 (structure)

구조체 : 관련된 정보를 그룹화하여 표현구조체 : 관련된 정보를 그룹화하여 표현

학생

이름이름 학번학번 주소주소 전화번호전화번호

구조체 이름

멤버 변수

Page 8: Multimedia Programming 03: 점 ,  선 ,  면

구조체의 정의

• Example)

struct student{

char name[30];int number;float grade;

};

struct student{

char name[30];int number;float grade;

};

Page 9: Multimedia Programming 03: 점 ,  선 ,  면

멤버로의 접근

구조체변수이름 .맴버변수이름구조체변수이름 .맴버변수이름

struct score{

int korean;int math;

};

score a;a.korean = 30;a.math = 80;

struct score{

int korean;int math;

};

score a;a.korean = 30;a.math = 80;

Page 10: Multimedia Programming 03: 점 ,  선 ,  면

Image structure ( 이미지 구조체 )• IplImage (Image Processing Library)• 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 */

};•

Page 11: Multimedia Programming 03: 점 ,  선 ,  면

Image I/O ( 이미지 입출력 ) IplImage* cvLoadImage(image_path);

파일로 부터 이미지를 읽는다 . 성공할 경우 메모리가 생성되고 IplImage pointer 를 반환실패할 경우 NULL 값을 리턴

cvSaveImage(image_path, IplImage *);이미지를 파일로 저장한다 . 형식은 확장자로 부터 결정

cvReleaseImage(IplImage **);이미지를 저장하고 있던 메모리를 해제한다 .

BMP, JPEG, PNG, TIFF, PPM/PGM 포멧등이 지원됨

Page 12: Multimedia Programming 03: 점 ,  선 ,  면

Image I/O ( 이미지 입출력 ) 이미지의 포멧을 바꾸어 저장하기 예 :

IplImage* img = cvLoadImage(“picture.jpg”);if( img != NULL ) cvSaveImage( “picture.bmp”,

img );

Page 13: Multimedia Programming 03: 점 ,  선 ,  면

Windows

• cvNamedWindow(window_name);윈도우를 생성한다 . 윈도우는 이름을 부여할 수 있고 , 각 이름을 기준으로 구분한다 . cvNamedWindow(“ViewA”);cvMoveWindow(“ViewA”,300,100);cvDestroyWindow(“ViewA”);…

• cvShowImage(window_name, IplImage *);주어진 이름에 해당하는 윈도우에 이미지를 보여준다 . 한 이미지만을 보여 줄 수 있으며 , 부분 적인 출력은 하지 못한다 .

• cvDestroyWindow(window_name);주어진 이름에 해당하는 윈도우를 없앤다 .

Page 14: Multimedia Programming 03: 점 ,  선 ,  면

User Input

• int cvWaitKey( int delay=0 )사용자가 키를 누르기를 정해진 대기시간 만큼 기다린다 . 대기시간이 초과되면 다음 명령을 수행한다 . 대기시간으로 0 을 설정하면 영원히 기다린다 . – 시간의 값은 millisecond

대기시간을 이용하면 애니메이션을 만들 수 있다 .

• 활용예 ) 두 개 이상의 그림을 교대로 보여줌

Page 15: Multimedia Programming 03: 점 ,  선 ,  면

Image and Pixel

Page 16: Multimedia Programming 03: 점 ,  선 ,  면

픽셀 (Pixel: Picture Element)

• 이미지 : 픽셀의 집합• 비트맵 (Bitmap)

Page 17: Multimedia Programming 03: 점 ,  선 ,  면

픽셀

• 픽셀의 색 : 적색 (Red), 녹색 (Green), 청색(Blue)

• 컬러의 수 픽셀 당 비트 수 ( 밝기 레벨 )

Page 18: Multimedia Programming 03: 점 ,  선 ,  면

Pixel 의 값 = ( 위치 , 색 )

• 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System)

• 색 : CvScalar ( 색을 저장하는 구조체 )

x

y (0,0)(8,2)

Page 19: Multimedia Programming 03: 점 ,  선 ,  면

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

struct CvScalar {

double val[4]; };

Page 20: Multimedia Programming 03: 점 ,  선 ,  면

이미지에서 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 를 정보를 참조할것 )주의 : 반드시 x,y 는 이미지 범위 내부에 있어야함 ! (image 의 width 와 height 를 정보를 참조할것 )

Page 21: Multimedia Programming 03: 점 ,  선 ,  면

코딩연습

• 이미지의 일부를 Gray-scale image 로 만들기• Gray 이미지 : 각 픽셀마다 R, G, B 값이 모두

같은 이미지

• 칼라 이미지의 각 pixel 의 R, G, B 값으로 부터 대표값 (= 평균값 ) 을 얻는다

• 더 생각해 볼 문제 :– 이미지의 일부를 흑백 이미지로 만들기

Page 22: Multimedia Programming 03: 점 ,  선 ,  면

생각해 보기 : Sepia image 만들기

Page 23: Multimedia Programming 03: 점 ,  선 ,  면

빈 이미지 생성하기

• 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));

Page 24: Multimedia Programming 03: 점 ,  선 ,  면

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)

Page 25: Multimedia Programming 03: 점 ,  선 ,  면

Put everything together!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);

}

cvShowImage("HelloCV", img);cvWaitKey();

cvDestroyWindow("HelloCV");cvReleaseImage(&img);

return 0;}

HelloCV2.cpp

Page 26: Multimedia Programming 03: 점 ,  선 ,  면

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

Page 27: Multimedia Programming 03: 점 ,  선 ,  면

Do more!

• 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!

(x,y) w

h

Page 28: Multimedia Programming 03: 점 ,  선 ,  면

Do more2!

• Make your own function for drawing any kind of line :– 예 ) void DrawLine

(IplImage * img, int stx, int sty, int edx, int edy, CvScalar color)

image

Page 29: Multimedia Programming 03: 점 ,  선 ,  면

For those who want more

• OpenCV Official page: http://opencvlibrary.sourceforge.net

• OpenCV WiKi pape: http://opencv.willowgarage.com/wiki/

• A Korean Community: http://www.opencv.co.kr/