Top

OpenCV 2 Computer Vision Application Programming Cookbook 한국어판 [OpenCV 2를 활용한 컴퓨터 비전 프로그래밍]

  • 원서명OpenCV 2 Computer Vision Application Programming Cookbook (ISBN 9781849513241)
  • 지은이로버트 라가니에
  • 옮긴이이문호
  • ISBN : 9788960772946
  • 30,000원
  • 2012년 04월 10일 펴냄 (절판)
  • 페이퍼백 | 372쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 오픈소스 프로그래밍

판매처

  • 현재 이 도서는 구매할 수 없습니다.

책 소개

C++ 인터페이스 기반 OpenCV 2 라이브러리의 최신 내용을 담은 책이다. 딱딱한 영상처리와 컴퓨터 비전 이론 중 중요한 알고리즘을 선정해, 초보자도 쉽게 읽으며 객체지향 프로그래밍으로 구현한 예제를 함께 배울 수 있도록 구성했다. 또한 C++로 효율적으로 구현하는 방법이 구현된 프레임워크를 제공하므로, 독자가 마음껏 수정해 자신만의 애플리케이션을 개발할 수 있다.

이 책에 실린 이미지 소스 다운로드>>
http://www.laganiere.name/opencvCookbook/img/cookbook_images.zip


[ 소개 ]

기초부터 고급 기술까지, OpenCV 2 라이브러리의 C++ 인터페이스를 이용한 컴퓨터 비전 프로그래밍 가이드북

『OpenCV 2 Computer Vision Application Programming Cookbook 한국어판』은 OpenCV 라이브러리에 있는 수많은 컴퓨터 비전 알고리즘을 소개하며, 영상을 읽고, 쓰고, 생성하고 다룰 수 있는 방법을 배운다. 일반적으로 영상 분석에 사용하는 다양한 기술과 C++로 효율적으로 구현할 수 있는 방법을 살펴본다.


[ 이 책에서 다루는 내용 ]

■ 올바른 객체지향 프로그래밍 실습을 통한 고급 컴퓨터 비전 애플리케이션 만들기
■ 화소별로 처리하기 위한 영상 조회
■ 영상이나 관심 영역을 히스토그램으로 개선
■ 수학적 형태학 사용과 변환 영상 필터링, 영상 분할
■ 묘사 장면의 다른 시점을 매칭하기 위한 영상 기하학 활용
■ 비디오 시퀀스 읽고 쓰기
■ 특징점 추적과 움직이는 객체를 식별하기 위한 비디오 프레임 처리
■ 관심 점, 선, 외곽선, 영상 내 포함하는 객체 감지


[ 이 책의 대상 독자 ]

컴퓨터 비전 애플리케이션을 구축하기 위해 OpenCV 라이브러리의 사용 방법을 배우고 싶은 C++ 프로그래머 초보에게 적합한 책이다. 또한 컴퓨터 비전 프로그래밍 개념을 알기 원하는 전문 소프트웨어 개발자에게도 안성맞춤이다. 학부 수준 컴퓨터 비전 코스에서 교재로 사용할 수 있으며, 영상처리와 컴퓨터 비전 분야의 석사 과정과 연구자에겐 최고의 참고서다. 이 책은 기본에서 고급 예제까지의 훌륭한 조합을 제공한다. 단, 이 책을 읽으려면 기본적인 C++ 지식은 알고 있어야 한다.


[ 이 책의 구성 ]

1장, 영상처리 준비: OpenCV 라이브러리를 소개하고, 마이크로소프트 비주얼 C++와 Qt 개발 환경을 이용해 간단한 애플리케이션을 실행하는 방법을 보여준다.

2장, 화소 다루기: 영상을 읽을 수 있는 방법을 설명한다. 화소별로 작업을 수행하기 위해 영상을 조회하는 여러 가지 방법을 기술한다. 또한 영상 내의 관심 영역을 정의하는 법을 배운다.

3장, 영상처리 클래스 구현: 훨씬 나은 컴퓨터 애플리케이션을 구축하는 데 도움이 될 여러 가지 객체지향 디자인 패턴을 적용한 예제로 구성한다.

4장, 히스토그램을 이용한 화소 개수 세기: 영상 히스토그램을 계산하는 방법과 영상을 수정하는 데 사용할 수 있는 방법을 보여준다. 히스토그램에 기반을 두되 영상 분할, 객체 감지, 영상 검색을 위한 애플리케이션을 제시한다.

5장, 형태학 연산을 이용한 영상 변환: 수학적 형태학의 개념을 살펴본다. 여러 연산자를 제시하고, 영상 내의 에지, 코너, 분할을 감지하는 데 사용할 수 있다.

6장, 영상 필터링: 주파수 분석과 영상 필터링의 원리를 알려준다. 저주파와 고주파 필터를 영상에 어떻게 적용하는지 보여준다. 두 영상 미분 연산자인 기울기와 라플라시안(Laplacian)을 제시한다.

7장, 선, 외곽선, 컴포넌트 추출: 기하 영상의 특징 감지에 초점을 맞춘다. 영상 내의 외곽선, 선, 연결 컴포넌트를 추출하는 방법을 설명한다.

8장, 관심점 감지와 매칭: 영상 내의 여러 가지 특징점 감지기를 기술한다. 또한 관심점(interest point) 기술자를 계산하고, 영상 간의 점을 매칭하는 데 사용하는 방법을 설명한다.

9장, 영상 내 투영 관계 추정: 영상 정보 안에 포함된 여러 관계를 분석한다. 또한 동일한 장면을 갖는 두 영상 간에 존재하는 투영 관계를 살펴본다.

10장, 비디오 시퀀스 처리: 비디오 시퀀스를 읽고 저장하고 각 프레임을 처리하기 위한 프레임워크를 제공한다. 또한 프레임에서 다음 프레임의 특징점 추적, 카메라 앞에서 움직이는 전경 객체를 추출하는 방법을 보여준다.

저자/역자 소개

[ 저자 서문 ]

영상과 비디오가 폭발적으로 늘어나고, 강력하고 구입하기 적당한 컴퓨팅 기기도 손쉽게 구할 수 있는 디지털 세상이지만, 복잡한 영상 애플리케이션을 만들기는 쉽지 않다. 영상과 비디오를 조작하는 수많은 소프트웨어 툴과 라이브러리 속에서 자신만의 애플리케이션을 만들기 원하는 사람이 사용할 수 있는 툴로 가장 적합한 것은 OpenCV 라이브러리다.

OpenCV(Open Source Computer Vision)은 500개 이상의 영상과 비디오 분석을 위해 최적화된 알고리즘을 포함하는 오픈소스 라이브러리다. 1999년에 소개됐고, 컴퓨터 비전 분야의 연구자와 개발자 커뮤니티에서 주요 개발 툴로 많이 채택했다. 애초 OpenCV는 인텔의 비전 연구 진행과 비전 기반 CPU 집약 애플리케이션과 같은 부가 개발을 촉진하기 위해 개리 브라드스키(Gary Bradski)가 이끄는 팀에서 개발했다. 베타 시리즈를 배포한 후 2006년에 1.0 버전을 선보였다. 2009년, OpenCV 2 출시와 함께 두 번째 메이저 배포를 단행했다. 주요 변경 사항으로는 특히 이 책에서 사용하는 새로운 C++ 인터페이스다. 이 책을 집필하는 시점에서 최신 배포 버전은 2.2다(2010년 12월).

이 책은 라이브러리의 특징을 다수 다루고 특정 작업을 완수하기 위해 라이브러리를 사용하는 방법을 보여준다. OpenCV 함수와 클래스에서 제공하는 모든 옵션을 완전하되 상세하게 다루지는 않지만, 처음부터 끝까지 애플리케이션을 구축하는 데 필요한 요소를 제공한다. 또한 영상 분석에 대한 근본 개념을 살펴보고, 컴퓨터 비전에서 중요한 알고리즘도 일부 기술한다.

이 책은 영상과 비디오 분석의 세계를 접할 수 있는 기회를 제공할 것이다. 그러나 단지 시작일 뿐이다. 좋은 소식은 OpenCV가 끊임없이 진화하고 확장 중이라는 점이다. 라이브러리의 기능을 계속 업데이트하는 OpenCV 온라인 문서를 참조하자.

http://opencv.willowgarage.com/wiki/


[ 저자 소개 ]

로버트 라가니에 (Robert Laganière)
캐나다에 있는 오타와 대학교 교수다. 1996년 몬트리올 INRS-Telecommunications에서 박사 학위를 받았다. 라가니에는 비디오 분석, 지능형 영상 감시와 영상 기반 모델링에 관심 있는 컴퓨터 비전 분야의 연구자다. 또한 VIVA 연구실의 공동 설립 연구원이자, 원격 모니터링을 위한 클라우드 기반 솔루션을 제공하는 회사인 iWatchLife.com의 수석 과학자다. 라가니에는 2001년 맥그로힐 출판사에서 출간한 『Object-oriented Soft Enineering』의 공저자다.
저자의 웹사이트는 http://www.laganiere.name이다.


[ 옮긴이의 말 ]

옷깃만 스쳐도 인연이라는 말이 있습니다. 이에 대한 이야기를 들려주겠습니다. 기억이 잘 나지 않지만 아마도 2006년이었을 겁니다. 그때 OpenCV가 무엇인지 궁금했는데, 당시 책이 거의 없다 보니 구글로 자료를 찾는 과정에서 우연히 한 사이트를 보고 ‘아! 그렇게 만들면 되는구나’라며 감탄했습니다. 세월이 흐르고 흘러 7년이 지난 후에 이 책을 번역하는 과정에서 그 사이트를 만든 분이 이 책의 저자였음을 알았을 때의 제 소감은 굳이 말씀드리지 않아도 아시리라 믿습니다.

이와 같이 이 책의 저자인 라가니에 교수는 오래 전부터 OpenCV에 관심을 갖고 관련 문서를 공개했으며, C++ 인터페이스 기반으로 책을 최초로 출간했을 정도로 열정을 가진 분입니다.

사실 저도 아주 오래 전에 OpenCV를 MFC와 연계해 책을 저술했고, 우리나라부터 중국, 일본, 미국 순으로 OpenCV 책을 출간하면 바로 입수해 꼼꼼하게 분석한 적이 있습니다. 시간이 흐를수록 OpenCV는 매우 빠르게 업그레이드되고, C++ 인터페이스를 도입해 좀 더 편한 컴퓨터 비전 애플리케이션 개발 환경을 제공하는데, 책만은 그만큼 따라가지 못했다는 안타까움이 들었습니다. 왜 그럴까요? OpenCV는 영상처리부터 컴퓨터 비전까지 다양한 분야를 포괄하는 방대한 라이브러리이므로 모든 내용을 다룰 수 없었기 때문입니다. 아울러 개발 환경이 천차만별이고, C/C++/파이썬 등 여러 가지 프로그래밍 언어 관련 함수를 제공하고 있기 때문입니다.

때마침 에이콘 출판사에서 팩트 출판사의 『OpenCV 2 computer Vision Application Programming Cookbook』을 저에게 번역하도록 권했을 때 조금은 놀랐습니다. 영상처리와 컴퓨터 비전은 대학교재 출판사만 가능한 반면, 에이콘 출판사는 알고 계시는 대로 IT의 최신 흐름을 반영하는 책을 출간하는 유명한 출판사였기 때문입니다. 의외였지만 망설임 없이 수락했습니다. 그땐 건강 사정으로 인해 책을 보기가 아주 힘겨워 한동안 멀리했지만, 독자에게 정말 도움이 되는 책이 될 거라는 믿음을 가졌기 때문입니다.

덕분에 흐릿하게 보이는 글자를 항상 200% 이상 확대해 번역하는 과정에서 수많은 시행착오를 겪기도 했지만, 영상처리를 처음 공부했을 때의 행복감을 만끽했습니다. 그때의 행복감을 이제 독자 여러분에게도 전해드리고자 합니다.

『OpenCV 2 computer Vision Application Programming Cookbook 한국어판』은 지금까지 출간된 C 언어 기반 OpenCV 책과 달리 차별화되며, OpenCV 2.X의 C++ 인터페이스를 중심으로 기본 영상처리 과정부터 컴퓨터 비전의 중요 알고리즘 등을 디자인 패턴을 반영한 객체지향 프로그래밍으로 구현한 예제와 함께 공부할 수 있는 입문서입니다. 덧붙여 C++를 올바르게 활용하고 싶거나 영상처리와 컴퓨터 비전 분야에 관심이 많은 C++ 전문 개발자에게 길라잡이가 될 것이라 믿습니다.

제가 늘 하는 말이 있습니다. 다른 분야도 그렇지만 영상처리와 컴퓨터 비전은 눈으로 보이는 부분을 다루는 만큼 이론을 잘 이해하고 프로그래밍 개발을 함께 수반해야 하는 분야입니다. 특히 특정 라이브러리를 사용해야 하는 상황이라면 더욱 그렇습니다.

OpenCV에서 제공하는 함수나 클래스의 사용 방법을 정확하게 배우는 것이 중요합니다. 하지만 해당 알고리즘의 구현 원리를 제대로 이해하지 못한 채 OpenCV만 믿고 무작정 가져다 쓰면 자신의 실력 향상에 결코 도움이 될 수 없습니다. 그만큼 OpenCV에서 제공하는 온라인 문서와 관련 알고리즘을 기술한 이론서를 함께 보면서 더 많은 이해를 하고, 제대로 활용할 수 있을 때까지 끊임없이 노력할 것을 당부 드립니다.

아울러 이 책이 마침표가 아닌 시작으로서, 독자 여러분에게 좀 더 멋진 컴퓨터 비전 애플리케이션을 만들 수 있는 좋은 책으로 자리매김하길 바랍니다.


[ 옮긴이 소개 ]

이문호
관심 분야는 문헌정보학과 정보검색이며, 오픈소스 자바 검색엔진인 루씬(Lucene)에 관한 첫 국내서인 『루씬 인 액션』(에이콘 출판사, 2005)을 공역했다. 영상처리 분야에서는 오픈소스 영상처리 라이브러리를 다룬 책을 오픈소스 라이브러리 실무 시리즈로 펴낸 저자로 잘 알려져 있다. 대표 저서는 『오픈소스 OpenCV를 이용한 컴퓨터 비전 실무 프로그래밍』(홍릉과학출판사, 2007)과 『영상처리 전문가를 꿈꾸는 당신에게』(홍릉과학출판사, 2009) 등이 있다.

목차

목차
  • 1 영상처리 준비
    • 소개
    • OpenCV 라이브러리 설치
    • MS 비주얼 C++로 OpenCV 프로젝트 만들기
    • Qt로 OpenCV 프로젝트 만들기
    • 영상을 불러들이고, 보여주고, 저장하기
    • Qt를 이용한 GUI 애플리케이션 생성
  • 2 화소 다루기
    • 소개
    • 화소값에 접근
    • 포인터로 영상 조회
    • 반복자로 영상 조회
    • 영상을 조회하기 위한 효율적인 반복문
    • 이웃 접근으로 영상 조회
    • 간단한 영상 산술 연산 실행
    • 관심 영역 정의
  • 3 영상처리 클래스 구현
    • 소개
    • 알고리즘 설계 과정에서 전략 패턴 사용
    • 처리 모듈 간의 통신을 위한 컨트롤러 사용
    • 싱글턴 디자인 패턴 사용
    • 애플리케이션 설계 위한 모델-뷰-컨트롤러 구조 사용
    • 컬러 공간 변환
  • 4 히스토그램을 이용한 화소 개수 세기
    • 소개
    • 히스토그램 계산
    • 영상 모습을 수정하기 위한 룩업 테이블 적용
    • 영상 히스토그램 평활화
    • 영상 내 특정 내용을 감지 위한 히스토그램 역투영
    • 객체를 찾기 위한 평균 이동 알고리즘 사용
    • 히스토그램 비교를 이용한 유사 영상 검색
  • 5 형태학 연산을 이용한 영상 변환
    • 소개
    • 형태학 필터를 이용한 영상 침식과 팽창
    • 형태학 필터를 이용한 영상 열림과 닫힘
    • 형태학 필터를 이용한 에지와 코너 감지
    • 워터쉐드를 이용한 영상 분할
    • 그랩컷 알고리즘으로 전경 객체 추출
  • 6 영상 필터리
    • 소개
    • 저주파 필터를 이용한 영상 필터링
    • 중간 값 필터를 이용한 영상 필터링
    • 에지 감지를 위한 방향성 필터 적용
    • 영상에 대한 라플라시안 계산
  • 7 선, 외곽선, 컴포넌트 추출
    • 소개
    • 캐니 연산자로 영상 외곽선 감지
    • 허프 변환으로 영상 내 선 감지
    • 선을 점집합으로 맞추기
    • 컴포넌트의 외곽선 추출
    • 컴포넌트의 모양 기술자 계산
  • 8 관심 점 감지와 매칭
    • 소개
    • 해리스 코너 감지
    • FAST 특징 감지
    • 크기 불변 SURF 특징 감지
    • SURF 특징 기술
  • 9 영상 내 투영 관계 추정
    • 소개
    • 영상 변환
    • 카메라 교정
    • 한 쌍의 영상에 대한 기본 행렬 계산
    • RANSAC을 이용한 영상 매칭
    • 두 영상 간의 호모그래피 계산
  • 10 비디오 시퀀스 처리
    • 소개
    • 비디오 시퀀스 읽기
    • 비디오 프레임 처리
    • 비디오 시퀀스 쓰기
    • 비디오 내 특징점 추적

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

p. 136 11행 cv::NatND → cv::MatND

p. 151 코드 추가
cv::Mat find(const cv::Mat& image) {
cv::Mat result;

hranges[0]
= 0.0; hranges[1]
= 255.0; channels[0]
= 0; channels[1]
= 1; channels[2]
= 2;

cv::calcBackProject(&image, 1,    // 입력 영상
      channels,            // 사용하는 채널 목록
      histogram,           // 사용하는 히스토그램
      result,                 // 역투영 결과
      ranges,              // 범위 값
      255.0                  // 스케일링 인자
  );


// 이진 영상을 얻기 위한 역투영 경계값
if (threshold>0.0)
  cv::threshold(result, result,
       255*threshold, 255, cv::THRESH_BINARY);


return result;

}