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

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

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

이 책에서는 OpenCV를 폭넓게 활용할 수 있도록 Tesseract-OCR과 TensorFlow 등을 활용해 영상 처리 프로젝트까지 진행하고, 다양한 응용 방법을 제시합니다.

 

★ 이 책에서 다루는 내용 ★

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • TensorFlow와 Python OpenCV4를 활용한 프로젝트

 

도서 상세 이미지

윤대희

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

  • [01부] 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에서 사용되는 기본 데이터 타입
      • 스칼라(Scalar) 구조체
      • Python OpenCV에서 사용되는 기본 데이터 타입
    • 02 Mat 데이터
      • 조밀 행렬(dense matrix)
      • Mat 클래스 – N차원 밀집 행렬
      • Mat 클래스 메모리 레이아웃
      • Mat 객체 생성
      • MatExpr 클래스 – 행렬 표현식
      • 행렬의 개별 단위 요소에 접근하기
      • 행렬의 블록 단위 요소에 접근하기
      • Mat 클래스 행렬 연산
      • 그 밖의 행렬 메서드
      • 희소 행렬
      • 희소 행렬 생성
      • 희소 행렬의 요소 할당 및 접근
      • Mat 클래스 - 관심 영역
      • Mat 클래스 - 관심 채널
      • Numpy 행렬
    • 03 Numpy 데이터
      • ndarray 클래스 - N차원 배열
      • 배열의 개별 단위 요소에 접근하기
      • 배열의 블록 단위 요소에 접근하기
      • 배열 차원 변형
      • 배열 병합 및 분리
      • 그 밖의 배열 함수
      • 배열 연산
      • matrix 클래스
      • ndarray 클래스 - 관심 영역
      • ndarray 클래스 - 관심 채널
    •  
  • [02부] C# & 파이썬 함수
    •  
  • ▣ 04장: 기초 예제
    • 01 이미지 입력
    • 02 이미지 출력
    • 03 동영상 출력
      • FPS(Frame Per Second)
    • 04 카메라 출력
    • 05 도형 그리기
      • 선형 타입
      • 비트 시프트
      • 직선 그리기
      • 사각형 그리기
      • 원 그리기
      • 호 그리기
      • 내부가 채워지지 않은 다각형 그리기
      • 내부가 채워진 다각형 그리기
      • 문자 그리기
    • 06 결과 저장
      • 이미지 저장
      • 동영상 저장
    •  
  • ▣ 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 원 검출
    •  
    • [03부] 실전 예제
    •  
  • ▣ 08장: C# - 명함 검출
    • 01 테서렉트
    • 02 각도 계산
    • 03 사각형 검출
    • 04 이미지 변환
    • 05 문자 인식
    •  
  • ▣ 09장: 파이썬 - 객체 검출
    • 01 텐서플로
    • 02 객체 검출
    • 03 정규 표현식
    • 04 객체 추적
    • 05 객체 인식
    •  
  • ▣ 부록A: 색상 코드표 - 스칼라 구조체의 색상 코드표
    •  
  • ▣ 부록B: 정규 표현식 - 메타 문자 목록
    - 이스케이프 문자 목록
    - 최소 매칭 목록
    - 정규 표현식 함수 - 플래그
    - Match 객체의 메서드 - Match 객체의 속성
  • 51쪽, 페이지 상단 예제 코드의 밑에서 4번째 줄

    dst = np.hstack([[image[:,:,0], result])
    

    ==>

    dst = np.hstack([image[:,:,0], result])
    
  • 93쪽, 본문 밑에서 5번째 줄

    일치시키려면 표 1.2의 ‘Python OpenCV 정밀도 형식’을 참고한다.

    ==>

    일치시키려면 표 2.2의 ‘Python OpenCV 정밀도 형식’을 참고한다.

  • 95쪽, 예제 3.23의 5번째 줄

    array3 = np.array(matrix1, copy=False)
    

    ==>

    array3 = np.array(array1, copy=False)
    
  • 95쪽, 본문 밑에서 5번째 줄

    array4는 mat() 함수로 matrix 클래스를 ndarray 클래스로 사용하지 않고 하위 클래스로 사용한다.

    ==>

    array4는 mat() 함수로 하위 클래스로서 ndarray 클래스가 아닌 matrix 클래스를 사용한다.

  • 97쪽, 본문 6번째 줄

    앞서 설명한 subok 매개변수처럼

    ==>

    앞서 설명한 copy 매개변수처럼

  • 99쪽, 본문 밑에서 4번째 줄

    즉, array[0:-1:2]와 동일한 의미를 갖는다.

    ==>

    즉, array[0:-1:2]와 동일한 결과를 갖는다.

  • 106쪽, 본문 밑에서 2번째 줄

    예제 3.33은 브로드캐스팅과

    ==>

    예제 3.32는 브로드캐스팅과

  • 106쪽, 예제 3.33의 번호를 예제 3.32로 수정

  • 110쪽, 본문 밑에서 첫 번째 줄

    예제 3.34는 matrix 클래스를 사용해

    ==>

    예제 3.33은 matrix 클래스를 사용해

  • 110쪽, 예제 3.34의 번호를 예제 3.33으로 수정

  • 111쪽, 본문 밑에서 첫 번째 줄

    예제 3.35는 관심 영역을

    ==>

    예제 3.34는 관심 영역을

  • 111쪽, 예제 3.35의 번호를 예제 3.34로 수정

  • 112쪽, 본문 2번째 줄

    end가 도착 지점이 아닌 너비와 높이를 의미한다는 것이다.

    ==>

    end가 너비 또는 높이가 아닌 도착 지점을 의미한다는 것이다.

  • 112쪽, 본문 밑에서 9번째 줄

    예제 3.36은 관심 영역을

    ==>

    예제 3.35는 관심 영역을

  • 112쪽, 예제 3.36의 번호를 예제 3.35로 수정

  • 190쪽, 본문 밑에서 첫 번째 줄

    예제 5.8과 예제 5.9는 C# OpenCvSharp과

    ==>

    예제 5.9와 예제 5.10은 C# OpenCvSharp과

  • 190쪽, 예제 5.8의 번호를 예제 5.9로 수정

  • 191쪽, 본문 첫 번째 줄

    예제 5.8은 그레이스케일 이미지에

    ==>

    예제 5.9는 그레이스케일 이미지에

  • 191쪽, 예제 5.9의 번호를 예제 5.10으로 수정

  • 192쪽, 본문 첫 번째 줄

    예제 5.9는 그레이스케일 이미지에

    ==>

    예제 5.10은 그레이스케일 이미지에

  • 254쪽, 그림 6-14를 다음 그림으로 교체

    opencv4-6-14.png

  • 274쪽, 본문 밑에서 4번째 줄

    Roof Edge는 노이즈가 제거된 뒤의 노이즈가 제거된 뒤의 Line Edge다.

    ==>

    Roof Edge는 노이즈가 제거된 뒤의 Line Edge다.

  • 389쪽, 페이지 상단 예제의 아래 코드를 수정(예제 9.12)

    flow = cv2.calcOpticalFlowFarneback(prev_gray, next_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.1, flags= cv2.OPTFLOW_USE_INITIAL_FLOW)
    

    ==>

    flow = cv2.calcOpticalFlowFarneback(prev_gray, next_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.1, flags= cv2.OPTFLOW_FARNEBACK_GAUSSIAN)
    
  • 392쪽, 예제 9.13의 첫 번째 줄

    flow = cv2.calcOpticalFlowFarneback(prev_gray, next_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.1, flags=cv2.OPTFLOW_USE_INITIAL_FLOW )
    

    ==>

    flow = cv2.calcOpticalFlowFarneback(prev_gray, next_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.1, flags=cv2.OPTFLOW_FARNEBACK_GAUSSIAN)