OpenCV - 1

2 분 소요

OpenCV - 1

OpenCV - 컴퓨터 비전 라이브러리
설치 - pip install opencv-python

영상은 2차원 행렬.
그레이스케일 영상: 흑백사진이지만 2톤으로 표현된 것이 아니라 밝기 정보를 256단계로 표현
3줄4칸 이미지:
[[12,234,123,89],
[78,54,98,198],
[12,234,123,89]]

트루컬러 영상: 칼라 영상. r, g, b 각각 256 단계로 표현

3줄4칸 이미지:
[[[12,234,123],[78,54,98], [234,123,89], [54,98,198]],
[[78,54,98],[198,234,123,89],[78,54,98], [234,123,89]],
[[12,234,123],[78,54,98], [234,123,89], [54,98,198]]]

2D image img.shape => (h, w, c)
h:세로길이 / w:가로길이 / c:색상(b, g, r)

영상 데이터 타입

1
import cv2
<영상 생성=""> ```python import numpy as np img1 = np.empty((200, 300), dtype=np.uint8)#그레이스케일 이미지 img2 = np.zeros((200, 300, 3), dtype=np.uint8)#칼라 이미지 img3 = np.ones((200, 300), dtype=np.uint8)*255 #그레이스케일 이미지. 흰바탕 img4 = np.full((200, 300, 3), (0, 255, 255), dtype=np.uint8) #칼라 이미지의 노란바탕 cv2.imshow('img1', img1) cv2.imshow('img2', img2) cv2.imshow('img3', img3) cv2.imshow('img4', img4) cv2.waitKey(0) #키보드 입력 대기. 입력한 키값 반환 cv2.destroyAllWindows() #모든 윈도우 창 닫음 ``` <이미지 읽기=""> cv2.imread('파일경로', flag) flag - cv2.IMREAD_COLOR: 칼라 이미지. 상수 1 cv2.IMREAD_GRAYSCALE: 흑백 이미지. 상수 0 cv2.IMREAD_UNCHANGED: 알파값도 같이 읽음. 상수 -1 <이미지 출력=""> cv2.imshow(title, img) title - 제목 img - 출력할 이미지 값(numpy배열. cv2.imread()의 반환값) ```python import cv2 fname = 'b.jpg' original = cv2.imread(fname, cv2.IMREAD_COLOR) gray = cv2.imread(fname, cv2.IMREAD_GRAYSCALE) unchange = cv2.imread(fname, cv2.IMREAD_UNCHANGED) print(original.shape) print(gray.shape) print(unchange.shape) cv2.imshow('Original', original) cv2.imshow('Gray', gray) cv2.imshow('Unchange', unchange) cv2.waitKey(0) #키보드 입력 대기. 입력한 키값 반환 cv2.destroyAllWindows() #모든 윈도우 창 닫음 ``` (410, 640, 3) (410, 640) (410, 640, 3) ```python original ``` array([[[212, 211, 221], [208, 207, 217], [212, 209, 218], ..., [125, 95, 76], [123, 96, 76], [123, 96, 76]], [[212, 211, 221], [213, 212, 222], [224, 220, 231], ..., [128, 98, 79], [127, 97, 78], [125, 98, 78]], [[229, 229, 241], [227, 228, 238], [240, 239, 249], ..., [129, 99, 80], [128, 98, 79], [128, 98, 79]], ..., [[ 19, 54, 67], [ 0, 35, 48], [ 0, 31, 41], ..., [ 14, 53, 85], [ 25, 61, 91], [ 18, 55, 83]], [[ 15, 53, 65], [ 23, 58, 71], [ 0, 31, 41], ..., [ 52, 93, 126], [ 42, 80, 112], [ 38, 76, 106]], [[ 23, 61, 73], [ 29, 67, 79], [ 4, 39, 49], ..., [ 40, 80, 115], [ 35, 73, 107], [ 36, 74, 106]]], dtype=uint8) ```python original.shape ``` (410, 640, 3) <이미지 쓰기=""> cv2.imwrite('파일명', img) img - 저장할 이미지 값(numpy 배열) ```python import cv2 fname_o = 'b.jpg' fname_t = 'b_gray.jpg' gray = cv2.imread(fname_o, cv2.IMREAD_GRAYSCALE) cv2.imwrite(fname_t,gray) img = cv2.imread(fname_t) cv2.imshow('image',img) cv2.waitKey(0) #키보드 입력 대기 cv2.destroyAllWindows() #모든 윈도우 창 닫음 ``` matplot에 이미지 출력 보통 컴퓨터에서 칼라를 표현할때에는 [r,g,b]로 표현하지만 opencv는 [b,g,r]로 표현한다. 그래서 opencv로 읽어들인 이미지를 다른 프로그램을 통해 출력하면 이미지의 색상이 반전되어 출력되므로 출력하기 전 r,g,b를 반전해야 한다. ```python import cv2 from matplotlib import pyplot as plt img = cv2.imread('a.jpg', cv2.IMREAD_COLOR) #opencv로 읽은 이미지를 matplot에 그대로 출력. 색상 반전됨 plt.imshow(img) #plt.xticks([]) # x축 눈금 #plt.yticks([]) # y축 눈금 plt.show() ```
output_13_0
```python import cv2 from matplotlib import pyplot as plt # as는 alias 적용시 사용 img = cv2.imread('a.jpg', cv2.IMREAD_COLOR) #opencv로 읽은 이미지의 r,g,b순서를 뒤집어 배열 b, g, r = cv2.split(img) # img파일을 b,g,r로 분리 img2 = cv2.merge([r,g,b]) # b,,g, r을 바꿔서 Merge plt.imshow(img2) plt.xticks([]) # x축 눈금 plt.yticks([]) # y축 눈금 plt.show() ```
output_14_0