SlideShare a Scribd company logo
1 of 13
About this deck
허블우주망원경(Hubble Space Telescope, HST)은 1990년에 지구 저궤도로 발사된
우주망원경으로 현재도 가동 중이다. 허블은 최초의 우주망원경은 아닐지언정 가장 크고 가장
쓰임이 많은 우주망원경 중 하나이며, 천문학에서 없어서는 안 될 연구 도구이자 공공관계
구축에 도움을 주는 것으로도 유명하다. 허블의 명칭은 천문학자인 에드윈 허블의 이름에서 본뜬
것으로, 콤프턴 감마선 관찰위성, 찬드라 엑스선 관찰위성, 스피처우주망원경과 함께 NASA의
거대관찰위성 Great Observatories의 일원이다.
2.4미터의 주거울을 갖춘 허블의 주요 장비 네가지는 근자외선, 가시광선, 근적외선 스펙트럼을
관찰한다. 허블의 궤도는 지구의 대기권의 방해를 피해 지상 망원경과 비교해서 배경광의 영향을
대폭 줄일 수 있으므로 해상도가 매우 높은 영상을 얻는데 적합하다. 허블은 역대 가장 상세한
가시광선 영상들을 촬영함으로써 먼 시공간의 모습을 제공하기도 하였다. 우주의 팽창속도를
정확하게 측정한 것처럼, 허블이 이룩한 수많은 관측은 곧 천체물리학 난제의 돌파구로 이어졌다.
• 전자현미경(電子顯微鏡)은 물체를 비출 때 빛 대신 음극선을 사용하
는 기구이다. 진공 상태에서만 작동된다.
• 10만 배의 배율을 가지며, 물질의 미소 구조를 보는 데 이용한다. 투
과 전자 현미경(TEM), 주사 전자 현미경(SEM), 반사 전자 현미경
(Reflection electron microscope, REM), 투사 주사 전자 현미경
(STEM), 저전압 전자 현미경(LVEM), 저온 전자 현미경 등이 있다.
Opencv
OpenCV(Open Source Computer Vision)은 실시간 컴퓨터
비전을 목적으로 한 프로그래밍 라이브러리
C/C++, Python으로 개발이 가능함
OpenCV는 TensorFlow , PyTorch 및 Caffe의 딥러닝 프레
임워크를 지원
원래 인텔에서 개발했다
오픈소스이며 무료이다
최신버전은 4.1.1
목차
• OpenCV 설치
• 주요 클래스: 기본 자료형 클래스, Mat 클래스, Vec과 Scala 클래스, Input클래스와 Output클래스
• 주요 기능 : 카메라와 동영상, 그리기 함수, 이벤트 처리, 데이터파일 입출력, 유용한 기능
• 영상조절: 밝기조절, 명암비조절, 히스토그램 분석
• 영상의 산술 및 논리연산
• 필터링: 영상의 필터링, 블러닝, 샤프닝, 잡음제거
• 기하학적 변환: 어파인변환(영상의 기하학적 변환), 투시변환(원근법에 따라 입체감을 주면서 표현)
• 에지검출과 응용: 에지검출, 직선검출과 원검출
• 컬러영상 처리: 컬러영상 다루기, 컬러영상 처리기법
• 이진화와 모폴로지연산(침식과 패창)
• 레이블링( 같은 픽셀 값들끼리 그룹화하여 번호를 매긴 것)과 외곽선검출
• 객체검출: 템플릿 매칭, 얼굴검출, HOG알고리즘, 보행자검출
• 지역특징점검출과 매칭: 코너검출,특징점검출,특징점매칭, 영상이어붙이기
• 머신러닝: K최근점이웃, 서포트 벡터 머신, DNN(딥뉴럴네트워크), SSD(Single Shot Detector),얼굴검출
흑백 이미지
컬러 이미지: 픽셀바이트, rgb, cmyk
이미지 파일 포맷
• BMP: 압축하지 않고 저장. 파일구조가 간단하지만, 파일용량이
커진다. 파일입출력도 빠른 편.
• JPG: 사진과 같은 트루컬러를 저장하기 위해 사용. 손실압축. 파
일용량이 적어진다.
• GIF: 256이하의 색상을 가진 영상을 저장. 사진저장시 화질이 크
게 손상된다. 인터넷에서 움직이는 그림에 사용. 컴퓨터비전에
서는 잘 사용되지 않음.
• PNG: 무손실 압축. 트루컬러, 그레이스케일 모두 지원. JPG처럼
픽셀값이 변하지 않음.PNG파일은 알파체널을 지원하기 때문에
이미지를 투명하게 처리가능.
실습
1.이미지 읽기
imread("lenna.bmp");
2.이미지 저장
cvSaveImage("복사.jpg", image);
3.흑백이미지로 변환
cv::cvtColor( image, gray, CV_BGR2GRAY );
#include "opencv2/opencv.hpp"
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
cout << "Hello OpenCV " << CV_VERSION << endl;
Mat img;
img = imread("lenna.bmp");
if (img.empty()) {
cerr << "Image load failed!" << endl;
return -1;
}
namedWindow("image");
imshow("image", img);
waitKey();
return 0;
}
#include "opencvcv.h"
#include "opencvhighgui.h"
int main()
{
IplImage* image = cvLoadImage("조석.jpg", 1);
cvNamedWindow("window");
cvShowImage("window", image);
cvWaitKey(0);
cvSaveImage("복사.jpg", image);
cvDestroyWindow("window");
cvReleaseImage(&image);
return 0;
}
#include "opencv2/opencv.hpp"
using namespace std;
using namespace cv;
int main()
{
/// Read 8-bit grayscale image
cv::Mat image = cv::imread( "{YOUR_IMAGE_PATH}/frozen.jpg", CV_LOAD_IMAGE_COLOR );
if( !image.data) {
cout << "Could not open or find the image" << std::endl;
return -1;
}
// Create a new matrix to hold the gray image
cv::Mat gray;
// convert RGB image to gray
cv::cvtColor( image, gray, CV_BGR2GRAY );
cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE );
cv::imshow( "Display window", image );
cv::namedWindow( "Result window", CV_WINDOW_AUTOSIZE );
cv::imshow( "Result window", gray );
cv::waitKey( 0 );
return 0;
}
// RGB to CMYK conversion
void rgb2cmyk(cv::Mat& img, std::vector<cv::Mat>& cmyk) {
// Allocate cmyk to store 4 componets
for (int i = 0; i < 4; i++) {
cmyk.push_back(cv::Mat(img.size(), CV_8UC1));
}
// Get rgb
std::vector<cv::Mat> rgb;
cv::split(img, rgb);
// rgb to cmyk
for (int i = 0; i < img.rows; i++) {
for (int j = 0; j < img.cols; j++) {
float r = (int)rgb[2].at<uchar>(i, j) / 255.;
float g = (int)rgb[1].at<uchar>(i, j) / 255.;
float b = (int)rgb[0].at<uchar>(i, j) / 255.;
float k = std::min(std::min(1- r, 1- g), 1- b);
cmyk[0].at<uchar>(i, j) = (1 - r - k) / (1 - k) * 255.;
cmyk[1].at<uchar>(i, j) = (1 - g - k) / (1 - k) * 255.;
cmyk[2].at<uchar>(i, j) = (1 - b - k) / (1 - k) * 255.;
cmyk[3].at<uchar>(i, j) = k * 255.;
}
}
}
// Test rgb2cmyk function
int main(int argc, char** argv) {
// TODO: change filename
cv::Mat src = cv::imread("c:filename.jpg");
std::vector<cv::Mat> dst;
rgb2cmyk(src, dst);
// Display results
cv::imshow("src", src);
cv::imshow("c", dst[0]);
cv::imshow("m", dst[1]);
cv::imshow("y", dst[2]);
cv::imshow("k", dst[3]);
cv::waitKey();
return 0;
}

More Related Content

Similar to OpenCV preview

Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflectionBongseok Cho
 
Summary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detectionSummary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detection창기 문
 
Summary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detectionSummary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detection창기 문
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadowMoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1MoonLightMS
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자MoonLightMS
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorialTaeKang Woo
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑MoonLightMS
 
retinal layer segmentation
retinal layer segmentationretinal layer segmentation
retinal layer segmentationSeungbae Ji
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow MapsBongseok Cho
 

Similar to OpenCV preview (10)

Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
Summary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detectionSummary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detection
 
Summary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detectionSummary in recent advances in deep learning for object detection
Summary in recent advances in deep learning for object detection
 
Depth buffershadow
Depth buffershadowDepth buffershadow
Depth buffershadow
 
[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1[1023 박민수] 깊이_버퍼_그림자_1
[1023 박민수] 깊이_버퍼_그림자_1
 
[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자[1023 박민수] 깊이_버퍼_그림자
[1023 박민수] 깊이_버퍼_그림자
 
c++ opencv tutorial
c++ opencv tutorialc++ opencv tutorial
c++ opencv tutorial
 
[0212 박민수]환경 매핑
[0212 박민수]환경 매핑[0212 박민수]환경 매핑
[0212 박민수]환경 매핑
 
retinal layer segmentation
retinal layer segmentationretinal layer segmentation
retinal layer segmentation
 
Reflective Shadow Maps
Reflective Shadow MapsReflective Shadow Maps
Reflective Shadow Maps
 

More from Daniel Shin

<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업Daniel Shin
 
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태Daniel Shin
 
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시Daniel Shin
 
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료Daniel Shin
 
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일Daniel Shin
 
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성Daniel Shin
 
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행Daniel Shin
 
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인Daniel Shin
 
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.docDaniel Shin
 
인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.doc인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.docDaniel Shin
 
덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docxDaniel Shin
 
C언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxC언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxDaniel Shin
 
포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptx포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptxDaniel Shin
 
resume20220510v3.pptx
resume20220510v3.pptxresume20220510v3.pptx
resume20220510v3.pptxDaniel Shin
 
미니메타버스v5.pptx
미니메타버스v5.pptx미니메타버스v5.pptx
미니메타버스v5.pptxDaniel Shin
 
카툰월드기획서.pptx
카툰월드기획서.pptx카툰월드기획서.pptx
카툰월드기획서.pptxDaniel Shin
 
프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptx프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptxDaniel Shin
 
3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)Daniel Shin
 
3D 기술 세미나2주차
3D 기술 세미나2주차3D 기술 세미나2주차
3D 기술 세미나2주차Daniel Shin
 

More from Daniel Shin (20)

<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업<마블 프로젝트>  소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
<마블 프로젝트> 소설, 시나리오, 만화, 애니메이션. 인문학 육성사업
 
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
인공지능발표-근태.ppt 유전자 알고리즘을 이용한 영상 특징 추출 경북대학교 박근태
 
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
0_소공 디자인.pdf ATM디자인 설계 문서 경북대학교 2024년 2월 20일 게시
 
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
게임 프로그래밍의 이해-신동인 2024년2월20일 게시 레볼루션 발표자료
 
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
리얼 연예 시뮬레이션 기획서 업무추진계획서 윤주용 길태욱 신동인 2011년 4월 7일
 
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
얌미르2 게임기획서.doc 이왕희 레볼루션 2024년 1월 26일 발행 미완성
 
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
배틀체스GO 기획서 초안 20220616v2 원작자: 신동인 2024년1월26일 발행
 
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
뚝딱한국요리 화면설계 2024년 1월 26일 발행 원작자: 김덕호, 신동인
 
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
3D창작동화전집 디지털컨텐츠 사업계획서 20230404v2.doc
 
인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.doc인터넷 오락실게임 사업계획서_20230320v2.doc
인터넷 오락실게임 사업계획서_20230320v2.doc
 
덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx덴티스 면접 포트폴리오_신동인v1.docx
덴티스 면접 포트폴리오_신동인v1.docx
 
C언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptxC언어강의 발표자료 1강.pptx
C언어강의 발표자료 1강.pptx
 
포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptx포인터와 참조_20220908v2_신동인.pptx
포인터와 참조_20220908v2_신동인.pptx
 
resume20220510v3.pptx
resume20220510v3.pptxresume20220510v3.pptx
resume20220510v3.pptx
 
미니메타버스v5.pptx
미니메타버스v5.pptx미니메타버스v5.pptx
미니메타버스v5.pptx
 
카툰월드기획서.pptx
카툰월드기획서.pptx카툰월드기획서.pptx
카툰월드기획서.pptx
 
STL.doc
STL.docSTL.doc
STL.doc
 
프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptx프로젝트_성공하는_법.pptx
프로젝트_성공하는_법.pptx
 
3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)3D카툰메이커 완료세미나(복구됨)
3D카툰메이커 완료세미나(복구됨)
 
3D 기술 세미나2주차
3D 기술 세미나2주차3D 기술 세미나2주차
3D 기술 세미나2주차
 

OpenCV preview

  • 1. About this deck 허블우주망원경(Hubble Space Telescope, HST)은 1990년에 지구 저궤도로 발사된 우주망원경으로 현재도 가동 중이다. 허블은 최초의 우주망원경은 아닐지언정 가장 크고 가장 쓰임이 많은 우주망원경 중 하나이며, 천문학에서 없어서는 안 될 연구 도구이자 공공관계 구축에 도움을 주는 것으로도 유명하다. 허블의 명칭은 천문학자인 에드윈 허블의 이름에서 본뜬 것으로, 콤프턴 감마선 관찰위성, 찬드라 엑스선 관찰위성, 스피처우주망원경과 함께 NASA의 거대관찰위성 Great Observatories의 일원이다. 2.4미터의 주거울을 갖춘 허블의 주요 장비 네가지는 근자외선, 가시광선, 근적외선 스펙트럼을 관찰한다. 허블의 궤도는 지구의 대기권의 방해를 피해 지상 망원경과 비교해서 배경광의 영향을 대폭 줄일 수 있으므로 해상도가 매우 높은 영상을 얻는데 적합하다. 허블은 역대 가장 상세한 가시광선 영상들을 촬영함으로써 먼 시공간의 모습을 제공하기도 하였다. 우주의 팽창속도를 정확하게 측정한 것처럼, 허블이 이룩한 수많은 관측은 곧 천체물리학 난제의 돌파구로 이어졌다.
  • 2. • 전자현미경(電子顯微鏡)은 물체를 비출 때 빛 대신 음극선을 사용하 는 기구이다. 진공 상태에서만 작동된다. • 10만 배의 배율을 가지며, 물질의 미소 구조를 보는 데 이용한다. 투 과 전자 현미경(TEM), 주사 전자 현미경(SEM), 반사 전자 현미경 (Reflection electron microscope, REM), 투사 주사 전자 현미경 (STEM), 저전압 전자 현미경(LVEM), 저온 전자 현미경 등이 있다.
  • 3. Opencv OpenCV(Open Source Computer Vision)은 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리 C/C++, Python으로 개발이 가능함 OpenCV는 TensorFlow , PyTorch 및 Caffe의 딥러닝 프레 임워크를 지원 원래 인텔에서 개발했다 오픈소스이며 무료이다 최신버전은 4.1.1
  • 4. 목차 • OpenCV 설치 • 주요 클래스: 기본 자료형 클래스, Mat 클래스, Vec과 Scala 클래스, Input클래스와 Output클래스 • 주요 기능 : 카메라와 동영상, 그리기 함수, 이벤트 처리, 데이터파일 입출력, 유용한 기능 • 영상조절: 밝기조절, 명암비조절, 히스토그램 분석 • 영상의 산술 및 논리연산 • 필터링: 영상의 필터링, 블러닝, 샤프닝, 잡음제거 • 기하학적 변환: 어파인변환(영상의 기하학적 변환), 투시변환(원근법에 따라 입체감을 주면서 표현) • 에지검출과 응용: 에지검출, 직선검출과 원검출 • 컬러영상 처리: 컬러영상 다루기, 컬러영상 처리기법 • 이진화와 모폴로지연산(침식과 패창) • 레이블링( 같은 픽셀 값들끼리 그룹화하여 번호를 매긴 것)과 외곽선검출 • 객체검출: 템플릿 매칭, 얼굴검출, HOG알고리즘, 보행자검출 • 지역특징점검출과 매칭: 코너검출,특징점검출,특징점매칭, 영상이어붙이기 • 머신러닝: K최근점이웃, 서포트 벡터 머신, DNN(딥뉴럴네트워크), SSD(Single Shot Detector),얼굴검출
  • 7. 이미지 파일 포맷 • BMP: 압축하지 않고 저장. 파일구조가 간단하지만, 파일용량이 커진다. 파일입출력도 빠른 편. • JPG: 사진과 같은 트루컬러를 저장하기 위해 사용. 손실압축. 파 일용량이 적어진다. • GIF: 256이하의 색상을 가진 영상을 저장. 사진저장시 화질이 크 게 손상된다. 인터넷에서 움직이는 그림에 사용. 컴퓨터비전에 서는 잘 사용되지 않음. • PNG: 무손실 압축. 트루컬러, 그레이스케일 모두 지원. JPG처럼 픽셀값이 변하지 않음.PNG파일은 알파체널을 지원하기 때문에 이미지를 투명하게 처리가능.
  • 8. 실습 1.이미지 읽기 imread("lenna.bmp"); 2.이미지 저장 cvSaveImage("복사.jpg", image); 3.흑백이미지로 변환 cv::cvtColor( image, gray, CV_BGR2GRAY );
  • 9. #include "opencv2/opencv.hpp" #include <iostream> using namespace cv; using namespace std; int main() { cout << "Hello OpenCV " << CV_VERSION << endl; Mat img; img = imread("lenna.bmp"); if (img.empty()) { cerr << "Image load failed!" << endl; return -1; } namedWindow("image"); imshow("image", img); waitKey(); return 0; }
  • 10. #include "opencvcv.h" #include "opencvhighgui.h" int main() { IplImage* image = cvLoadImage("조석.jpg", 1); cvNamedWindow("window"); cvShowImage("window", image); cvWaitKey(0); cvSaveImage("복사.jpg", image); cvDestroyWindow("window"); cvReleaseImage(&image); return 0; }
  • 11. #include "opencv2/opencv.hpp" using namespace std; using namespace cv; int main() { /// Read 8-bit grayscale image cv::Mat image = cv::imread( "{YOUR_IMAGE_PATH}/frozen.jpg", CV_LOAD_IMAGE_COLOR ); if( !image.data) { cout << "Could not open or find the image" << std::endl; return -1; } // Create a new matrix to hold the gray image cv::Mat gray; // convert RGB image to gray cv::cvtColor( image, gray, CV_BGR2GRAY ); cv::namedWindow( "Display window", CV_WINDOW_AUTOSIZE ); cv::imshow( "Display window", image ); cv::namedWindow( "Result window", CV_WINDOW_AUTOSIZE ); cv::imshow( "Result window", gray ); cv::waitKey( 0 ); return 0; }
  • 12. // RGB to CMYK conversion void rgb2cmyk(cv::Mat& img, std::vector<cv::Mat>& cmyk) { // Allocate cmyk to store 4 componets for (int i = 0; i < 4; i++) { cmyk.push_back(cv::Mat(img.size(), CV_8UC1)); } // Get rgb std::vector<cv::Mat> rgb; cv::split(img, rgb); // rgb to cmyk for (int i = 0; i < img.rows; i++) { for (int j = 0; j < img.cols; j++) { float r = (int)rgb[2].at<uchar>(i, j) / 255.; float g = (int)rgb[1].at<uchar>(i, j) / 255.; float b = (int)rgb[0].at<uchar>(i, j) / 255.; float k = std::min(std::min(1- r, 1- g), 1- b); cmyk[0].at<uchar>(i, j) = (1 - r - k) / (1 - k) * 255.; cmyk[1].at<uchar>(i, j) = (1 - g - k) / (1 - k) * 255.; cmyk[2].at<uchar>(i, j) = (1 - b - k) / (1 - k) * 255.; cmyk[3].at<uchar>(i, j) = k * 255.; } } }
  • 13. // Test rgb2cmyk function int main(int argc, char** argv) { // TODO: change filename cv::Mat src = cv::imread("c:filename.jpg"); std::vector<cv::Mat> dst; rgb2cmyk(src, dst); // Display results cv::imshow("src", src); cv::imshow("c", dst[0]); cv::imshow("m", dst[1]); cv::imshow("y", dst[2]); cv::imshow("k", dst[3]); cv::waitKey(); return 0; }