2016.05.31 박정식 심규동 nangsik83@gmail.com 89kdsim@gmail.com OpenCV 기초 2016.05.31 박정식 심규동 nangsik83@gmail.com 89kdsim@gmail.com.

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

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
이정훈 전한배. 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.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
1. 개발 시스템 개요.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
-Part2- 제3장 포인터란 무엇인가.
OpenCV 설치 OpenCV 3.0, Visual Studio 2010 환경.
Multimedia Programming 05: Point Processing
Multimedia Programming 04: 점, 선, 면
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
자료 구조: Chapter 3 (2)구조체, 포인터
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
Red Color Detection Course ChanYoung Kim
Multimedia Programming 9: Text, Mouse Callback and Drawing
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
Red Color Detection Course ChanYoung Kim
제 3장. C보다 나은 C++ II.
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Multimedia Programming 19: Mouse with OpenCV
Multimedia Programming 02: Play with Images
14장. 포인터와 함수에 대한 이해.
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
11장. 1차원 배열.
C#.
Opencv 이민권.
13. 연산자 오버로딩.
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
OpenCV 설치 및 구성 OpenCV
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
영상처리 실습 인공지능연구실.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Red Color Detection Course ChanYoung Kim
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
OPENCV를 이용한 이미지처리 정은일 멀티미디어설계
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Fucntion 요약.
12. 상속 : 고급.
제 6 장 함수(functions).
제 15 강 문자와 코드 shcho.pe.kr.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
7주차: Functions and Arrays
2일차 영상처리 교육.
문서 작성에 사용되는 기본태그 HR, PRE, B, I, U, S.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
구조체(struct)와 공용체(union)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
Prof. Kyungshik Lim Kyungpook National University
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

2016.05.31 박정식 심규동 nangsik83@gmail.com 89kdsim@gmail.com OpenCV 기초 2016.05.31 박정식 심규동 nangsik83@gmail.com 89kdsim@gmail.com

OpenCV Installation

OpenCV Installation http://opencv.org/

OpenCV Installation http://opencv.org/downloads.html Visual studio 2015의 경우 3.1 Visual studio 2013의 경우 3.0 그 이하 버전의 경우 2.4x 설치

OpenCV Installation

OpenCV library 라이브러리를 사용하기 위해서는 헤더파일, lib 파일, dll 파일이 필요 헤더 파일 dll 파일 함수, 구조체, 클래스 등의 프로토타입이 선언되어 있으며, 컴파일에 필요 dll 파일 함수의 구현 내용이 변환된 기계어 코드의 집합. 실행시에 필요 lib 파일 각 함수에 대응되는 빈 껍데기 함수가 저장되어 있음. 링크시 필요. 각 함수의 실제 내용은 실행시에 dll 파일로부터 로드됨

Configurations of OpenCV

Configurations of OpenCV

Configurations of OpenCV

Configurations of OpenCV

Visual studio solution platform OpenCV 설치경로/build 에 x64만 있는 경우: x64 x64, x86 모두 있는 경우: x64, x86(Win32) 모두 사용 가능

Configurations of OpenCV Setting library path Project  Properties->Include Directories, Library Directories

Configurations of OpenCV Project  Properties  Include Directories Project  Properties  Library Directories 헤더 파일의 경로 설정 Lib 파일의 경로 설정 Visual studio 버전을 의미

Configurations of OpenCV

Configurations of OpenCV Setting path for dll files

OpenCV Test 링크에 사용할 라이브러리 파일 지정

OpenCV Test 링크에 사용할 라이브러리 파일 지정

Opencv Basic example

OpenCV Test OpenCV는 네임스페이스 cv 사용 #include "opencv2/opencv.hpp" int main() { cv::Mat srcImg = cv::imread("Lenna.png"); printf("Image Width: %d\n", srcImg.cols); printf("Image Height: %d\n", srcImg.rows); printf("Image Channel Num: %d\n", srcImg.channels()); cv::namedWindow("Source Image"); cv::imshow("Source Image", srcImg); cv::waitKey(0); cv::destroyAllWindows(); return 0; } OpenCV는 네임스페이스 cv 사용

cv::Mat Mat 주로 1, 2차원 배열 형태의 데이터에 대해 사용 rows cols Channels() 영상, 행렬, 벡터 등 rows 행의 수, 높이(영상) cols 열의 수, 폭(영상) Channels() 채널 수 (RGB의 경우 3)

Point, Size cv::Point cv::Point2f cv::Point2d cv::Size cv::Size2f 2차원 정수 좌표. 멤버 변수: x,y cv::Point2f 2차원 실수 좌표 (float). 멤버 변수: x,y cv::Point2d 2차원 실수 좌표 (double). 멤버 변수: x,y cv::Size 정수인 크기 값을 저장. 멤버 변수: width, height cv::Size2f 실수인 크기 값을 저장 (float). 멤버 변수: width, height

Rect, RotatedRect cv::Rect cv::RotatedRect 사각형을 표현. 멤버 변수: x, y, width, height cv::RotatedRect 회전된 사각형을 표현 멤버 변수 Point2f center Size2f size float angle 멤버 함수 Rect boundingRect() (x, y) width height boundingRect size.height size.width center angle

Load image Mat imread(const string& filename, int flags=1) 파일로부터 영상 로드 파일명. bmp, jpe, png, etc. flags > 0 3채널 영상(BGR) =0 1채널 영상(grayscale로 강제 변환) < 0 알파 채널 포함

Save image bool imwrite(const string& filename, Mat img) 영상을 파일로 저장 파일명. bmp, jpe, png, etc. img 영상 데이터

GUI functions namedWindow(const string &winname, int flags) 윈도우 생성 윈도우 이름. 이것으로 윈도우를 식별 flags WINDOW_NORMAL WINDOW_AUTOSIZE 기본값 WINDOW_OPENGL 생성된 윈도우는 cv::destroyWindow 또는 cv::destroyAllWindows로 제거

GUI functions imshow(const string& winname, InputArray mat) 윈도우에 영상 출력 영상 출력할 윈도우의 이름 mat 영상

GUI functions int waitKey(int delay=0) 윈도우에 키 입력 delay return value 키 입력 대기 시간 (ms) 0일 경우 키가 입력될때까지 block return value 입력된 키의 ASCII 코드

OpenCV Test 2 #include "opencv2/opencv.hpp" int main() { cv::Mat srcImg = cv::imread("Lenna.png"); cv::namedWindow("Source Image"); while (1) cv::imshow("Source Image", srcImg); int key = cv::waitKey(10); if (key == 27) break; } cv::destroyAllWindows(); return 0; ESC 키 입력

GUI function setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 ) 마우스 콜백 함수 등록 winname 대상 윈도우의 이름 onMouse 콜백 함수 void (*MouseCallback)(int event, int x, int y, int flags, void* userdata) event 마우스 이벤트 x, y: 마우스 포인터 좌표 flags: 이벤트 플래그. Alt, shift, ctrl, 키 입력여부 userdata 콜백 함수에 전달할 데이터

Mouse callback example #include "opencv2/opencv.hpp" cv::Mat srcImg; void on_mouse(int event, int x, int y, int flags, void* param){ if (event == CV_EVENT_LBUTTONDOWN){ printf("Mouse Pointer: %d, %d\n", x, y); cv::circle(srcImg, cv::Point(x, y), 5, cv::Scalar(255, 0, 0), 2); } int main() { srcImg = cv::imread("Lenna.png"); cv::namedWindow("Source Image"); cv::setMouseCallback("Source Image", on_mouse); while (1) cv::imshow("Source Image", srcImg); int key = cv::waitKey(10); if (key == 27) break; cv::destroyAllWindows(); return 0;

circle(Mat& img, Point center, int radius, const Scalar& color, int thickness=1, int lineType=8, int shift=0) 영상에 원을 그림 Img 대상 영상 Center 원의 중심 좌표 Radius 원의 반지름 Color 색상 (BGR) thickness 선 두께 lineType 8: 8-connected line 4: 4-connected line CV_AA: andialiased line

Mouse callback 2 … Mat의 데이터에 접근 x: 1 2 3 y Mat의 영상 데이터 구조 - BGR void on_mouse(int event, int x, int y, int flags, void* param){ if (event == CV_EVENT_LBUTTONDOWN){ unsigned char B = srcImg.at<unsigned char>(cv::Point(3 * x, y)); unsigned char G = srcImg.at<unsigned char>(cv::Point(3 * x + 1, y)); unsigned char R = srcImg.at<unsigned char>(cv::Point(3 * x + 2, y)); printf("Mouse Pointer: %d, %d \n", x, y); printf("Color Value : %d, %d, %d \n", B, G, R); } Mat의 데이터에 접근 x: 1 2 3 … y Mat의 영상 데이터 구조 - BGR

Color space conversion

Color space conversion cvtColor(const Mat &src, Mat &dst, int code, int dstCn=0 ) code CV_BGR2GRAY, CV_BGR2HSV … dstCn dst의 채널 수 0인 경우 src의 채널 수와 code를 통해 자동으로 설정

Color space conversion #include "opencv2/opencv.hpp" int main() { cv::Mat srcImg = cv::imread("Lenna.png"); cv::Mat dstImg; cv::cvtColor(srcImg, dstImg, CV_BGR2GRAY); cv::namedWindow("Source Image"); cv::namedWindow("Result Image"); cv::imshow("Source Image", srcImg); cv::imshow("Result Image", dstImg); int key = cv::waitKey(0); cv::destroyAllWindows(); cv::imwrite("convertedImage.jpg", dstImg); return 0; }

Color space conversion

Color space conversion HSV, YCbCr, RGB로도 변환 CV_BGR2HSV HSV의 각 채널 값 범위 H: 0 ~ 180 S: 0 ~ 255 V: 0 ~ 255 CV_BGR2YUV CV_BGR2RGB

camshift

CAMShift RotatedRect CamShift(Mat probImage, Rect& window, TermCriteria criteria) probImage 확률 분포 맵 window 초기 탐색 윈도우 criteria camshift 종료 조건. 예) Return value 추적된 영역 회전된 사각형으로 표현 cv::TermCriteria(CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 20, 1)  오차 변화가 1 이하인 경우 또는, 20회 반복한 경우 종료

확률 분포 맵을 Mat으로 변환 가로크기가 width, 세로크기가 height인 영상와 같은 크기의 float 배열인 prob라는 변수가 있을 경우 Double 배열의 경우 cv::Mat matProbMap = cv::Mat(height, width, CV_32F); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { matProbMap.at<float>(cv::Point(j, i)) = probMap[i*width + j]; } cv::Mat matProbMap = cv::Mat(height, width, CV_64F); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { matProbMap.at<double>(cv::Point(j, i)) = probMap[i*width + j]; }

Thank you Q&A