C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (ebook)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

이 책은 컴퓨터 비전 기초 이론을 비롯해 OpenCV에서 가장 많이 활용되는 기능들을 설명하고 이미지 데이터에서 유의미한 정보를 찾는 방식을 다룹니다. 또한 C#과 파이썬이라는 두 가지 프로그래밍 언어로 구성돼 있어 C#이나 파이썬 개발자분들이 손쉽게 OpenCV를 배울 수 있는 영상처리 입문서입니다.

이 책에서는 OpenCV를 폭넓게 활용할 수 있도록 머신러닝/딥러닝 모듈을 비롯해 Tesseract-OCR과 텐서플로(TensorFlow) 등을 활용해 영상 처리 프로젝트까지 진행하고, 다양한 응용 방법을 제시합니다.

★ 이 책에서 다루는 내용 ★

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트

 

도서 상세 이미지

윤대희

서울과학기술대학교에서 기계시스템디자인공학을 전공했다. 컴퓨터 비전 강의를 진행했으며, 블로그(https://076923.github.io/)를 통해 프로그래밍 및 컴퓨터 비전 지식을 공유하고 있다. 현재는 3D 공간 데이터 플랫폼 회사인 어반베이스의 머신러닝 팀에서 컴퓨터 비전과 딥러닝을 담당하며, 2D 도면을 3D로 변환하는 프로젝트를 진행하고 있다. 컴퓨터 비전, 머신러닝, 딥러닝을 연구하고 활용하는 데 관심이 있다.

  • [1부] OpenCV 이론
    • ▣ 01장: 컴퓨터 비전의 이해
      •  01. 컴퓨터 비전이란?
        • 영상 처리의 필요성
        • 영상 처리의 한계점
        • 데이터 변형
        • 이미지 데이터
      •  02. OpenCV란?
        • OpenCV의 역사
      •  03. 알고리즘 설계
        • 문제 해결을 위한 선행 조건
        • 하드웨어와 소프트웨어의 선택
        • 시스템 설계
        • 개발 규칙
      •  04. 디지털 이미지 프로세싱
        • 전처리 알고리즘
        • 노이즈 및 디노이즈
        • 특징 및 유사성 검출
      •  05. 영상 처리 분야
        • 영화 산업
        • 의료 분야
        • 이미지 번역
        • OpenCV의 활용
      •  06. C# OpenCvSharp 설치
        • NuGet 패키지 설치
        • 네이티브 래퍼(Native Wrapper) 적용
        • 확장 네임스페이스
        • OpenCvSharp 사용하기
        • 참고사항
      •  07. Python OpenCV 설치
        • pip를 이용한 설치
        • IDE
        • OpenCV 사용하기
        • 참고사항
    •  
    • ▣ 02장: OpenCV 시작하기
      •  01. 이미지 크기
        • 이미지 크기 속성
        • OpenCV에서 이미지의 크기를 표현하는 방법
      •  02. 정밀도
        • 비트 표현
        • OpenCV 정밀도 표현법
      •  03. 채널
        • 색상 표현
        • OpenCV 채널 표현법
      •  04. 관심 영역
      •  05. 관심 채널
      •  06. 히스토그램
    •  
    • ▣ 03장: 데이터 타입과 연산
      •  01. 기본 데이터
        • C# OpenCvSharp에서 사용되는 기본 데이터 타입
        • Python OpenCV에서 사용되는 기본 데이터 타입
      •  02. Mat 데이터
        • 조밀 행렬(dense matrix)
        • Mat 클래스 – N차원 밀집 행렬
        • Mat 클래스 메모리 레이아웃
        • Mat 객체 생성
        • MatExpr 클래스 – 행렬 표현식
        • 행렬의 개별 단위 요소에 접근하기
        • 행렬의 블록 단위 요소에 접근하기
        • Mat 클래스 행렬 연산
        • 그 밖의 행렬 메서드
        • 희소 행렬
        • 희소 행렬 생성
        • 희소 행렬의 요소 할당 및 접근
        • Mat 클래스 - 관심 영역
        • Mat 클래스 - 관심 채널
      •  03. Numpy 데이터
        • Numpy 행렬
        • ndarray 클래스 - N차원 배열
        • 배열의 개별 단위 요소에 접근하기
        • 배열의 블록 단위 요소에 접근하기
        • 배열 차원 변형
        • 배열 병합 및 분리
        • 그 밖의 배열 함수
        • 배열 연산
        • matrix 클래스
        • ndarray 클래스 - 관심 영역
        • ndarray 클래스 - 관심 채널
    •  
  • [02부] C# & 파이썬 함수
    • ▣ 04장: 기초 예제
      •  01. 이미지 입력
      •  02. 이미지 출력
        • 마우스 콜백
      •  03. 동영상 출력
        • FPS(Frame Per Second)
      •  04. 카메라 출력
      •  05. 이미지 연결
      •  06. 도형 그리기
        • 선형 타입
        • 비트 시프트
        • 직선 그리기
        • 사각형 그리기
        • 원 그리기
        • 호 그리기
        • 내부가 채워지지 않은 다각형 그리기
        • 내부가 채워진 다각형 그리기
        • 문자 그리기
      •  07. 트랙 바
      •  08. 결과 저장
        • 이미지 저장
        • 동영상 저장
    •  
    • ▣ 05장: 이미지 변형
      •  01. 색상 공간 변환
      •  02. HSV 색상 공간
      •  03. 이진화
        • 오츠 알고리즘
        • 삼각형 알고리즘
        • 적응형 이진화 알고리즘
      •  04. 이미지 연산
        • 덧셈 함수
        • 뺄셈 함수
        • 곱셈 함수
        • 나눗셈 함수
        • 최댓값 함수
        • 최솟값 함수
        • 최소/최대 위치 반환 함수
        • 절댓값 함수
        • 절댓값 차이 함수
        • 비교 함수
        • 선형 방정식 시스템의 해 찾기 함수
        • AND 연산 함수
        • OR 연산 함수
        • XOR 연산 함수
        • NOT 연산 함수
      •  05. 흐림 효과
        • 커널과 고정점
        • 테두리 외삽법
        • 단순 흐림 효과
        • 박스 필터 흐림 효과
        • 중간값 흐림 효과
        • 가우시안 흐림 효과
        • 양방향 필터 흐림 효과
    •  
    • ▣ 06장: 이미지 변환
      •  01. 확대 & 축소
        • 이미지 확대(Pyramid Up)
        • 이미지 축소(Pyramid Down)
      •  02. 이미지 크기 조절
      •  03. 대칭 & 회전
      •  04. 기하학적 변환
        • 아핀 변환
        • 원근 변환
      •  05. 모폴로지 변환
      •  06. 모폴로지 연산
        • 열림 연산
        • 닫힘 연산
        • 그레이디언트 연산
        • 탑햇 연산
        • 블랙햇 연산
        • 히트미스 연산
    •  
    • ▣ 07장: 이미지 검출
      •  01. 가장자리 검출
        • 소벨 미분
        • 샤르 필터
        • 라플라시안
        • 캐니 엣지
      •  02. 윤곽선 검출
        • 계층 구조
        • 윤곽선 검출
        • 윤곽선 그리기
      •  03. 다각형 근사
        • 윤곽선의 길이 계산
        • 윤곽선의 면적 계산
        • 윤곽선의 경계 사각형
        • 윤곽선의 최소 면적 사각형
        • 윤곽선의 최소 면적 원
        • 윤곽선의 타원 피팅
        • 윤곽선의 볼록 껍질
        • 윤곽선의 볼록성 시험
        • 윤곽선의 모멘트
      •  04. 코너 검출
      •  05. 직선 검출
      •  06. 원 검출
    •  
    • ▣ 08장: 머신러닝
      • 지도 학습
      • 비지도 학습
      •  01. K-평균 군집화 알고리즘
      •  02. K-최근접 이웃 알고리즘
        • Fashion-MNIST
        • K-최근접 이웃 알고리즘 적용
        • 실제 데이터 평가
      •  03. 서포트 벡터 머신
        • SVM 커널(Kernel)
        • SVM 유형
        • 서포트 벡터 머신 적용
        • HOG(Histograms of Oriented Gradients)
      •  04. 심층 신경망
        • 카페
        • 다크넷
        • 텐서플로
    •  
  • [3부] 실전 예제
    • ▣ 09장: C# - 명함 검출
      •  01. 테서렉트
      •  02. 각도 계산
      •  03. 사각형 검출
      •  04. 이미지 변환
      •  05. 문자 인식
    •  
    • ▣ 10장: 파이썬 - 객체 검출
      •  01. 텐서플로
      •  02. 객체 검출
      •  03. 정규 표현식
      •  04. 객체 추적
      •  05. 객체 인식
    •  
    • ▣ 부록A: 부록 _ 색상 코드표
      • 스칼라 구조체의 색상 코드표
    •  
    • ▣ 부록B: 정규 표현식
      • 메타 문자 목록
      • 이스케이프 문자 목록
      • 최소 매칭 목록
      • 정규 표현식 함수
      • 플래그
      • Match 객체의 메서드
      • Match 객체의 속성

※ Chapter 8 폴더의 darknet_model.zip 파일은 용량이 커서 Git의 LFS(Large File Storage)로 관리되고 있습니다. 따라서 위 링크를 통해 별도로 다운로드하거나 아래와 같이 저장소를 클론한 후에 추가로 LFS로 관리 중인 파일을 내려받으셔야 합니다.

git clone https://github.com/wikibook/opencv4
git lfs pull
  • 155쪽, 'C# OpenCvSharp의 내부가 채워진 다각형 그리기 함수'의 첫 번째 줄

    Cv2.Polylines(
    

    ==>

    Cv2.FillPoly(
    
  • 269쪽, 예제 6.8을 다음 코드로 교체

    import numpy as np
    import cv2
    
    src = cv2.imread("clouds.jpg")
    height, width, _ = src.shape
    
    src_pts = np.array([[0, 0], [0, height], [width, height], [width, 0]], dtype=np.float32)
    dst_pts = np.array([[300, 300], [0, height - 200], [width - 100, height - 100], [900, 200]], dtype=np.float32)
    
    M = cv2.getPerspectiveTransform(src_pts, dst_pts)
    dst = cv2.warpPerspective(src, M, (width, height), borderValue=(255, 255, 255))
    
    cv2.imshow("dst", dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()