▷ 오늘 학습 계획: OpenCV 강의(1~3)
컴퓨터 비전: 컴퓨터를 이용하여 정지 영상 또는 동영상으로부터 의미 있는 정보를 추출하는 방법을 연구하는 학문
영상의 화질 개선(image enhancement)
카메라로 찍은 사진을 더욱 선명하게 만들거나 색상을 원하는 형태로 변경
RAW 영상의 변환, 사진앱의 필터, 잡음 제거, HDR, Super Resolution
내용 기반 영상 검색(content-based image/video retrieval)
영상에 존재하는 사람, 사물, 색상 정보 등을 인식하여 유사한 영상을 자동으로 찾아주는 시스템, 비주얼 검색(visual search)
구글 이미지 검색, 구글 클라우드 비전 API
얼굴 검출 및 인식
얼굴 검출(face detection): 영상에서 얼굴의 위치와 크기를 찾는 기법
얼굴 인식(face recognition): 검출된 얼굴이 누구인지를 판단하는 기술
미세한 표정 변화도 감지, 조명 변화, 안경 착용, 헤어 스타일 변화등
의료 영상 처리
X-ray 또는 CT 영상 처리
영상 화질의 개선, 영상의 자동 분석
광학 문자 인식
영상에 있는 텍스트를 인식(OCR: Optical Character Recognition)
번역, 자동차 번호판 인식 등
머신 비전(machine vision)
공장 자동화: 제품의 불량 검사, 위치 확인, 측정 등
높은 정확도와 빠른 처리 시간 요구
인공지능 서비스
입력 영상을 객체와 배경으로 분할, 객체와 배경 인식, 상황 인식, 로봇과 자동차의 행동 지시
computer vision + sensor fusion + deep learning
인공지능 로봇, Amazon Go, 자율 주행 자동차
영상: 픽셀이 바둑판 모양의 격자에 나열되어 있는 형태(2차원 행렬)
픽셀(pixel): 영상의 기본 단위, picture element의 줄임말, 화소
영상에서 사용되는 좌표계
w × h 영상(width * height)
M × N 행렬
주요 사용되는 영상 데이터의 종류
⑴ 그레이스케일 영상(grayscale image)
흑백 사진처럼 색상 정보가 없이 밝기 정보로만 구성됨(256단계)
⑵ 트루컬러 영상(truecolor image)
컬러 사진처럼 색상 정보를 가지고 있어서 다양한 색상 표현
R, G, B 각각 256단계 -> 16,777,216 색상 표현 가능
그레이스케일 영상 특징
밝기 성분을 0(완전히 어두운 검정색) ~ 255(완전히 밝은 흰색) 범위의 정수로 표현
프로그래밍 언어에서 1Byte 사용
C/C++ : unsigned char
Python: numpy.unint8
트루컬러 영상 특징
R, G, B 각각 0~25 범위의 정수로 표현
프로그래밍 언어에서 3Bytes 사용
C/C++: 구조체, 클래스
Python: 튜플, numpy.ndarray
BMP
픽셀 데이터를 압축하지 않고 그대로 저장하여 용량이 큰 편이다.
파일 구조 단순, 별도의 라이브러리 없이 파일 입출력 프로그래밍 가능
JPG
주로 사진과 같은 컬러 영상 저장
손실 압축(lossy compression): 압축률이 좋아서 파일 용량 크게 감소
GIF
256 색상 이하의 영상 저장
무손실 압축(lossless compression)
움직이는 GIF 지원
PNG
Portable Network Graphics
컬러 영상도 무손실 압축
알파 채널(투명도) 지원
OpenCV 모듈: 메인 모듈/추가 모듈
pip install opencv-python # OpenCV 추가 모듈도 함께 사용하려면 opencv-contrib-python
import sys import cv2 img = cv2.imread('cat.bmp') if img is None: print('image load failed!') sys.exit() cv2.namedWindow('image') cv2.imshow('image', img) cv2.waitKey() cv2.destroyWindow('image')
영상 파일 불러오기
cv2.imread(filename, flags=None)
- flags
cv2.IMREAD_COLOR
cv2.IMREAD_GRAYSCALE
cv2.IMREAD_UNCHANGED
영상 파일 저장하기
cv2.imwrite(filename, img, params=None)
- params: 파일 저장 옵션 지정
정상적으로 저장하면 True, 실패하면 False 반환
새 창 띄우기
cv2.namedWindow(winname, flags=None)
- flags
cv2.WINDOW_NORMAL: 영상 크기를 창 크기에 맞게 지정
cv2.WINDOW_AUTOSIZE: 창 크기를 영상 크기에 맞게(기본값)
창 닫기
cv2.destroyWindow(winname) -> 지정한 창 하나만 닫기
cv2.destroyAllWindows() -> 열려 있는 모든 창 닫기
영상 출력하기
cv.imshow(winname, mat)
- mat: 출력할 영상 데이터
Windows: 출력된 이미지를 복사하거나 저장(ctrl s)할 수 있다.
cv2.waitKey() 함수를 호출해야 화면에 영상이 나타난다.
키보드 입력 대기
cv2.waitKey(delay=None)
- delay: 기본값 0, delay<=0이면 무한히 기다림
특정 키가 입력되면 창이 닫히게 하는 명령
while True: if cv2.waitKey() == ord('q): break
- 주요 특수키 코드: 27(ESC), 13(ENTER), 9(TAB)
OpenCV API 도움말 찾기
Matplotlib으로 컬러 영상 출력
- OpenCV에서 불러온 컬러 영상 데이터는 BGR 순서
- Matplotlib 영상 데이터의 색상 순서 RGB
→ cv2.cvtColor() 함수로 색상 순서 변경img = cv2.imread('cat.bmp') plt.imshow(cv2.cvtColor(cv2.COLOR BGR2RGB)) plt.show()
Matplotlib으로 그레이스케일 영상 출력
- plt.imshow() 함수에서 컬러맵 cmap = 'gray' 지정
img = cv2.imread('cat.bamp', cv2.IMREAD_GRAYSCALE) plt.imshow(img, cmap='gray') plt.show()
▷ 내일 학습 계획: OpenCV 강의(4~5)
[이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.]