24
Multimedia Programming 04: 점 , 점 , 점 Departments of Digital Contents Sang Il Park

Multimedia Programming 04: 점 , 선 , 면

Embed Size (px)

DESCRIPTION

Multimedia Programming 04: 점 , 선 , 면. Departments of Digital Contents Sang Il Park. Outline. Review OpenCV 익숙해 지기 선 면 Point Processing 1. Review. Pixel and color CvScalar cvGet2D cvSet2D. Pixel 의 값 = ( 위치 , 색 ). 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System) - PowerPoint PPT Presentation

Citation preview

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

Multimedia Programming 04:

점 , 선 , 면Departments of Digital

ContentsSang Il Park

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

Outline• Review• OpenCV 익숙해 지기

– 선– 면

• Point Processing 1

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

Review• Pixel and color• CvScalar• cvGet2D• cvSet2D

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

Pixel 의 값 = ( 위치 , 색 )• 위치 : 각 픽셀의 2D 좌표 (Image Coordinate

System)

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

x

y (0,0)(8,2)

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

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

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

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

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

빈 이미지 생성하기

• 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 8: Multimedia Programming 04: 점 ,  선 ,  면

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 9: Multimedia Programming 04: 점 ,  선 ,  면

코딩연습

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

같은 이미지

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

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

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

생각해 보기 : Sepia image 만들기

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

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 12: Multimedia Programming 04: 점 ,  선 ,  면

집에서 풀어 볼 것 ! ( 작년 기출문제 )• 원본 이미지 :

(lena.png)

• 원본 이미지 :

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

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/

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

Program Assignment #1• His invention

A camera His camera

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

Program Assignment #1• His pictureswith the current digital technology

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

Program Assignment #1• Recover the colorful world in 1907 by

yourself!

1I31I3

1I3

align

B

G

R

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

Program Assignment #1• 홈페이지에 4 개의 예제 그림이 있음 :

– http://dasan.sejong.ac.kr/~sipark/class2010/mm/

• 숙제 기한 : Sep.17 PM 23:59 ( 금요일 )– Email 제출 : [email protected] – Report ( doc, hwp, pdf)– Source code (cpp 파일 )

• 복수개의 파일 (h 파일 포함 ) 이 필요 하다면 첨부할 것

• 점수 :– 주석 및 리포트 : 20– Color 이미지가 나온다 : 40– 자동으로 그림이 맞추어 진다 : 40

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

선 , 면

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

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 20: Multimedia Programming 04: 점 ,  선 ,  면

Coding Practice: Line Drawing2• Make your own function for

Vertical line drawing:– 예 ) void DrawVLine

(IplImage * img, int x, int st, int ed, CvScalar color)

image

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

Coding Practice: Line Drawing 3• 시작점과 끝점을 잇는 라인 ?:

– 예 ) void DrawLine (IplImage * img, int x1, int y1, int x2, int y2, CvScalar color)

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

Coding Practice: Line Drawing 3• 시작점과 끝점을 잇는 라인 ?:

– 예 ) void DrawLine (IplImage * img, int x1, int y1, int x2, int y2, CvScalar color)

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

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 24: Multimedia Programming 04: 점 ,  선 ,  면

For those who want more• OpenCV Wiki-pages:

http://opencvlibrary.sourceforge.net

• For OpenCV Reference Manual:– http://opencv.willowgarage.com/documentation/index.html

• Supplied documentation: • OpenCV/docs/index.htm, faq.htm

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