Multimedia Programming 9: Text, Mouse Callback and Drawing

Slides:



Advertisements
Similar presentations
가. 3 일 취업완성 ! 성취반 _ 성공 취업 반 1 일차 시간 프로그램 내용비고 17:00 ~ 17:10 출석 및 일정 안내 17:10 ~ 18:10 취업 전략 및 채용 프로세스 이해 18:10 ~ 19:30 입사지원서 작성법 및 주요 기업 에세이 작성법 19:30 ~
Advertisements

일본주식시장의 신 고레가와긴조 투자전략 6 조 안승권. 신문수 발표자 : 신 문 수. 출 생 : 1897 효고현에서 출생 학 력 : 초등학교졸업, 사업가 1992 년 95 세 사망 유일한 자서전 1981 년 스미토모 금속광산 주식매매 200 억엔 벌다⇒ 일본 소득세 납세.
LG 그룹 밴치마킹. 1.LG 그룹 사이트의 장점  장점  LG 사이트에 접속 속도가 빠르며 용이 하다  LG 사이트에 접속한 BGM 을 예술로 승화시켜서 유저들에게 편안감 전달  가장 큰 장점으로는 시각장애인을 위한 사이트가 따로 배제  메뉴바 형식은 부분.
8장 Contours 장 호욱.
신 협 금융사고 예방제도 및 주요 사례.
2009개정 중등 국어과 교육과정 울산광역시교육청 교육과정 컨설팅단 : 정일진.
달라지는 노동법 개정 내용 노무법인 正道 잠시나마… 주요 노동관계법 개정내용 3. 마무리 Contents
Vision System Lab, Sang-Hun Han
이정훈 전한배. 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.
Implement of Input and Interaction
OpenGL Programming (III) 1. Drawing in 3D 2. Manipulating 3D Space
Multimedia Programming 05: Point Processing
CSS Web Page Construction
학습목표 5장. 오픈지엘 기본틀 논리적 입력장치를 설정하는 이유와 종류를 이해한다. 세 가지 입력모드의 차이점을 이해한다.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
CHAPTER 4. CSS 스타일시트 기초.
Web Renewal Project 김명원
Understanding of Multimedia
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
UIT Series HTML + JavaScript [Chapter 1] Html을 이용한 웹 페이지 만들기.
Multimedia Programming 17: Introduction to DirectShow
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Multimedia Programming 05: Point Processing
Multimedia Programming 04: 점, 선, 면
Chapter 03 배열, 구조체, 포인터.
C언어: 배열 (Arrays).
Multimedia Programming 11: Histogram Equalization/ Image Halftoning
Red Color Detection Course ChanYoung Kim
Multimedia Programming 16: Image Morphing
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
Multimedia Programming 25: Playing with Video
Multimedia Programming 11: Point Processing 6
Multimedia Programming 06: Point Processing3
Red Color Detection Course ChanYoung Kim
Multimedia Programming 18: GraphEditor
25장. 메모리 관리와 동적 할당.
Multimedia Programming 11: Image Warping
HTML5 웹 프로그래밍 입문 (개정판) 5장. 고급 표현을 위한 CSS3 활용.
Multimedia Programming 03: 점, 선, 면
Data structures 02.3:programming recursive functions
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Multimedia Programming 19: Mouse with OpenCV
Multimedia Programming 02: Play with Images
14주차.
우리집닷컴 Style Guide 우리집닷컴 Web Style Guide Web Planner 김 영실.
Multimedia Programming 10: Unsharp Masking/ Histogram Equalization
사회복지 법제론 /노인장기요양보험법 문은홍 조소라.
파피루스 사이트 웹기획서.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Chapter07 CSS3 글꼴과 문자 HTML5 Programming.
12강_CSS 속성-III font-family , font-size 속성
Red Color Detection Course ChanYoung Kim
박정식 심규동 OpenCV 기초 박정식 심규동
C-언어와 기반구조 정보보호학과 이정수 교수.
문서의 제목 나눔고딕 45pt 작성자 | 소속팀 / 상위부서 | 이 문서는 나눔글꼴로 작성되었습니다. 설치하기.
CONTENTS Ⅰ. 대회목적 Ⅱ. 대회개요 Ⅲ. 대회요강 Ⅳ. 대회규정 Ⅴ. 운영계획 Ⅵ. 홍보계획 Ⅶ. 예산계획.
문서의 제목 문서의 개요 작성자 이름 소속팀 소속팀 작성년월일
순천향대학교 공연영상미디어학부 미디어콘텐츠전공
천국 가는 길 천국 가는 길 ♧ 천국 가는 길 ♧ 1. 죄와 사망(지옥) 1) 사람의 3가지 공통점 - 죄인, 죽음, 심판
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
성전기공식(안) 식 순 1. 기공미사 2. 기 공 식 3. 축 하 연 천주교 수원교구 퇴촌성당.
HTML HTML 기본 구조와 태그 다양한 태그 다루기
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
6 장 실습 프레젠테이션 완성하기.
C.
비축사업 전자계약시스템 도입 용역 사용자매뉴얼(업체담당자용) Version 1.0.
2009개정 중등 국어과 교육과정.
Presentation transcript:

Multimedia Programming 9: Text, Mouse Callback and Drawing Departments of Digital Contents Sang Il Park

Outline Writing Text Mouse Callback in OpenCV Drawing

Writing Text in OpenCV OpenCV에서 글자 출력

C에서 문자를 기억하는 변수형 문자타입 char a; char b; a = ‘A’; b = 65; char : 1 Byte = 256가지 문자를 가지고 있는 문자표에 대응 char a; char b; a = ‘A’; b = 65; 변수의 정의 ‘ ’ 로 문자임을 표시. 숫자는 문자표의 65번째 문자를 의미.

문자표(ASCII)

문자열 한 문자가 아니라 문장(문자의 집합 = 문자열)은 어떻게 표현할까? 문자열 : char의 배열

문자열 문자(char) 가 여러 개 이어져 있는 것 NULL(0) 문자 문자열의 끝을 표현 ‘E’ ‘L’ ‘L’ ‘O’ ‘\0’ NULL(0) 문자 문자열의 끝을 표현

NULL 문자 0을 의미 (ASCII 문자표의 0번째 특수문자) 문자열의 끝은 반드시 NULL로 끝나야 한다. char a=‘\0’; char b = 0;

OpenCV에서 문자열 출력법 1. 폰트의 종류 및 크기를 결정한다 (초기화) 2. 문자열을 원하는 위치에 원하는 색으로 그려준다 cvInitFont( CvFont * font, int face, hscale, vscale ); cvPutText(IplImage *img, char * text, CvPoint org, CvFont * font, CvScalar color );

cvInitFont : 폰트 설정 CvFont: 폰트의 설정을 기억하는 구조체 변수 face: 사용할 글씨체의 이름 cvInitFont( CvFont * font, int face, hscale, vscale ); CvFont: 폰트의 설정을 기억하는 구조체 변수 face: 사용할 글씨체의 이름 hscale, vscale: 가로 세로 확대율 정상크기는 모두 1.0으로 준다. CV_FONT_HERSHEY_SIMPLEX : normal size sans-serif font CV_FONT_HERSHEY_PLAIN : small size sans-serif font CV_FONT_HERSHEY_DUPLEX : normal size sans-serif font CV_FONT_HERSHEY_COMPLEX : normal size serif font CV_FONT_HERSHEY_TRIPLEX : normal size serif font CV_FONT_HERSHEY_COMPLEX_SMALL : smaller version CV_FONT_HERSHEY_SCRIPT_SIMPLEX : hand-writing style font CV_FONT_HERSHEY_SCRIPT_COMPLEX : more complex variant

cvPutText : 글자 그리기 img: 글을 쓸 이미지 text: 문자열을 나타내는 char 배열 cvPutText(IplImage *img, char * text, CvPoint org, CvFont * font, CvScalar color ); img: 글을 쓸 이미지 text: 문자열을 나타내는 char 배열 font: 폰트의 설정을 기억하고 있는 구조체 color: 글자의 색 org: 글씨의 기준 위치 (글씨의 왼쪽 아래모서리) 점의 위치를 표현하는 구조체: CvPoint cvPoint(x,y) 함수를 사용하면 쉽게 쓸 수 있다

글자 쓰는 예제 (100,100)의 위치에 “ABC”를 출력하라 char text[4]; text[0] = ‘A’; text[1] = ‘B’; text[2] = ‘C’; text[3] = 0; CvFont font; // cvInitFont( CvFont * font, int face, hscale, vscale ); cvInitFont (&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0); // cvPutText(IplImage *img, char * text, CvPoint org, CvFont * font, CvScalar color ); cvPutText (img, text, cvPoint(100,100), &font, CV_RGB(0,0,0));

Announcement: PA #2 제출: 소스코드 제출: 10월 5일(일요일) 저녁 11시59분까지 이메일로 제출: sipark@sejong.ac.kr 이메일의 제목: [멀티미디어1(2)반] 학번-이름 실행 파일(*.cpp/*.h)은 하나일 경우는 그냥 제출, 이미지를 포함, 여러 개일 경우는 압축(zip) 후 제출 압축파일 이름: 학번-이름.zip 소스 코드 내에 주석을 충실히 달 것 보고서 제출: 10월 6일(월요일) 수업시간 전까지

Programming Assignment #2 테스트 이미지:

Programming Assignment #2 테스트 이미지:

Programming Assignment #2 테스트 이미지:

Mouse Callback in OpenCV

Mouse With OPENCV

Keyboard With OPENCV int cvWaitKey(interval)

Mouse With OPENCV cvSetMouseCallback(…)

Mouse Callback? 콜백 함수(Callback): 마우스 콜백(mouse callback): 특정 함수가 어떤 함수의 인자로서 사용될 때 이 함수를 콜백 함수라고 한다. 마우스 콜백(mouse callback): 마우스의 상태에 변화가 생겼을 때 불리는 함수 예시) 마우스가 움직인다 왼(오른) 버튼이 눌리고 있음(올라가고 있음), 더블클릭, …

마우스 콜백 사용하기 OpenCV에서는 사용자가 임의의 함수를 만들고 이를 마우스에 변화가 생겼을 때 호출되게 할 수 있다. 이를 위해서는 다음 2가지 일을 하여야 한다: 구현(Implementation) 마우스에 변화가 생겼을 때 무엇을 할 것인가?를 정의함. 등록(Registration) 위에 정의한 함수를 opencv에게 사용하겠다고 등록시킴. void yourFunction (int event, int x, int y, int flags, void *param); void cvSetMouseCallback(window_name, yourFunction)

구현(Implementation) 함수의 이름은 자유롭게 지을 수 있다 예) on_mouse(..), myMouse(…), … void yourFunction (int event, int x, int y, int flags, void *param); 함수의 이름은 자유롭게 지을 수 있다 예) on_mouse(..), myMouse(…), … 입력 인자들은 OpenCV가 알려주는 것으로 마우스에 어떤 변화가 생겼는 지 알려주는 정보가 담겨있다.

Implementation OpenCV가 넘겨주는 메세지 어떤 마우스 관련 이벤트 종류인지 알려줌 Examples) void yourFunction (int event, int x, int y, int flags, void *param); OpenCV가 넘겨주는 메세지 어떤 마우스 관련 이벤트 종류인지 알려줌 Examples) CV_EVENT_MOUSEMOVE (마우스가 움직임) CV_EVENT_LBUTTONDOWN (왼쪽버튼이 눌리고 있음) CV_EVENT_RBUTTONDOWN (오른버튼이 눌리고 있음) CV_EVENT_MBUTTONDOWN (중간버튼이 눌리고 있음) CV_EVENT_LBUTTONUP (왼쪽버튼이 올라가고 있음) CV_EVENT_RBUTTONUP (오른버튼이 올라가고 있음) CV_EVENT_MBUTTONUP (중간버튼이 올라가고 있음)

Implementation OpenCV가 넘겨주는 메세지 마우스의 현재 위치를 표현 (x,y) void yourFunction (int event, int x, int y, int flags, void *param); OpenCV가 넘겨주는 메세지 마우스의 현재 위치를 표현 (x,y) 값은 이미지 좌표계를 기준으로 함 (왼쪽 윗편이 원점) x y (0,0) (8,2)

Implementation OpenCV가 넘겨주는 메세지 마우스 및 키보드의 현재 상태 Examples) void yourFunction (int event, int x, int y, int flags, void *param); OpenCV가 넘겨주는 메세지 마우스 및 키보드의 현재 상태 Event는 마우스가 현재 취하는 동작 Flags는 현재 마우스나 키보드의 상태 Examples) CV_EVENT_FLAG_LBUTTON (왼버튼이 눌린 상태) CV_EVENT_FLAG_RBUTTON (오른버튼이 눌린 상태) CV_EVENT_FLAG_MBUTTON (중간버튼이 눌린 상태) CV_EVENT_FLAG_CTRLKEY (콘트롤키가 눌린 상태) CV_EVENT_FLAG_SHIFTKEY (쉬프트키가 눌린 상태) CV_EVENT_FLAG_ALTKEY (알트키가 눌린 상태)

등록(Registration) void cvSetMouseCallback(window_name, yourFunction) 어떤 창(window_name)에 마우스에 변화가 생기면 특정 작업(yourFunction)을 수행하라. Example) cvSetMouseCallback( “test”, on_mouse);  “test”라는 창에서 마우스가 움직이면 on_mouse라는 함수를 호출하라

코딩연습 마우스에 변화가 생기면 그 때 마우스의 좌표를 출력하라 1. 구현( Implement your ) void myMouse(int event, int x, int y, int flags, void * param) { printf(“mouse: %d %d \n”, x, y); } 2. main() 함수 내에 등록(registration) cvSetMouseCallback(“test”, myMouse);

Coding Practice 마우스 왼쪽버튼을 누른 곳에 검은 점을 찍으라 1. 구현( Implement your ) void myMouse(int event, int x, int y, int flags, void * param) { if(event == CV_EVENT_LBUTTONDOWN) cvSet2D(img, y, x, CV_RGB(0,0,0)); cvShowImage(“test”, img); } 2. main() 함수 내에 등록(registration) cvSetMouseCallback(“test”, myMouse);

팔렛트 만들기 마우스 클릭 한 곳의 색 알아내기 구현부(Implement) void myMouse2(int event, int x, int y, int flags, void * param) { if(event == CV_EVENT_LBUTTONDOWN) s = cvGet2D(img, y, x); }

OpenCV를 이용한 도형 그리기 OpenCV에서 마우스 사용하기

선 그리기 pt1 부터 pt2 까지 주어진 두깨로 선을 그린다 점의 위치를 표현하는 구조체: CvPoint: void cvLine( IplImage, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1); pt1 부터 pt2 까지 주어진 두깨로 선을 그린다 점의 위치를 표현하는 구조체: CvPoint: cvPoint(x,y) 함수를 사용하면 쉽게 쓸 수 있다 예) (0,0)부터 (100,100)까지 검은 선분을 그리는 명령 struct CvPoint { int x; // x-coordinate int y; // y-coordinate } cvLine( img, cvPoint(0,0), cvPoint(100,100), CV_RGB(0,0,0), 3);

사각형 그리기 pt1를 pt2 모서리로 가지는 사각형을 그린다 pt1 pt2 두께에 -1을 주면 어떻게 될까? void cvRectangle( IplImage, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1 ) pt1를 pt2 모서리로 가지는 사각형을 그린다 pt1 pt2 두께에 -1을 주면 어떻게 될까?

원 그리기 주어진 중심과 반지름을 갖는 원을 그린다 radius center void cvCircle( IplImage, CvPoint center, int radius, CvScalar color, int thickness=1 ) 주어진 중심과 반지름을 갖는 원을 그린다 radius center

코딩연습 마우스의 왼쪽 버튼 클릭하고 드래깅하여 그 크기만큼 사각형을 그리라 마우스의 오른 버튼이 눌린 곳에 반지름 50짜리 원을 그리라 또는 마우스의 오른 버튼을 드래깅하여 그 크기만큼 원을 그리라