본문 바로가기
AI-driven Methodology/CV (Computer Vision)

[Computer Vision] 이미지 다루기

by goatlab 2021. 12. 21.
728x90
반응형
SMALL

이미지 읽기

 

cv2.imread (fileName, flag) 함수를 이용하여 이미지 파일을 읽는다. 이미지 파일의 경로는 절대 / 상대 경로가 설정할 수 있다.

 

import cv2

img = cv2.imread('xx.jpg', cv2.IMREAD_COLOR) # read xx.jpg
◦ parameters: fileName (str) – 이미지 파일의 경로, flag (int) – 이미지 파일을 읽을 때의 option 

◦ returns: image 객체 행렬 

◦ return type : numpy.ndarray
◦ cv2.IMREAD_COLOR : 이미지 파일을 color로 읽음. 투명한 부분은 무시되며, default 값

◦ cv2.IMREAD_GRAYSCALE : 이미지를 grayscale로 읽음. 실제 이미지 처리시 중간단계로 많이 사용

◦ cv2.IMREAD_UNCHANGED : 이미지파일을 alpha channel까지 포함하여 읽음 (3개의 flag대신에 1, 0, -1을 사용 가능)
◦ grayscale

 - 계산량 감소 : RGB는 3차원의 색공간을 가지고 있다. 즉, R : 0~255, G : 0~255, B : 0~255 를 가지고 있으며 이를 계산하면 255x255x255 = 16581374의 계산을 해야하지만 grayscale은 1차원인 0~255만 따지게 되므로 연산량이 대폭 감소한다.

- 이진화 하기에 적합
img.shape
(512, 512, 3)

 

OpenCV도 이미지 데이터를 NumPy 배열로 저장하지만 색 채널의 순서가 R-G-B 순서가 아니라, B-G-R 순서로 뒤바뀌어 있다는 점에 주의한다.

 

# 각 채널을 분리
b, g, r = cv2.split(img)

# b, r을 서로 바꿔서 Merge
img = cv2.merge([r, g, b])

 

cvtColor 명령을 사용하면 더 간단하게 색공간을 변환할 수도 있다.

 

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

 

이미지 파일을 만들 때는 imwrite 명령을 사용한다.

 

cv2.imwrite("./gray.png", img_gray)
True

 

이미지 보기

 

cv2.imshow(title, image) 함수는 이미지를 사이즈에 맞게 보여준다.

 

title (str) – 윈도우 창의 Title 

image (numpy.ndarray) – cv2.imread() 의 return 값
import cv2

fname = 'xx.jpg'

original = cv2.imread(fname, cv2.IMREAD_COLOR)
gray = cv2.imread(fname, cv2.IMREAD_GRAYSCALE)
unchange = cv2.imread(fname, cv2.IMREAD_UNCHANGED)

cv2.imshow('Original', original)
cv2.imshow('Gray', gray)
cv2.imshow('Unchange', unchange)

cv2.waitKey(0)
cv2.destroyAllWindows()
◦ cv2.waitKey() : keyboard 입력을 대기하는 함수로 0이면 key입력까지 무한대기, 특정 시간동안 대기하려면 milisecond 값 입력

◦ cv2.destroyAllWindows() : 화면에 나타난 윈도우를 종료

 

이미지 저장하기

 

cv2.imwrite(fileName, image) 함수를 이용하여 변환된 이미지나 동영상의 특정 프레임을 저장한다.

 

◦ fileName (str) – 저장될 파일명

◦ image – 저장할 이미지
import cv2

img = cv2.imread('xx.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('image',img)
k = cv2.waitKey(0)
if k == 27: # esc key
    cv2.destroyAllWindow()
elif k = ord('s'): # 's' key
    cv2.imwrite('lenagray.png',img)
    cv2.destroyAllWindow()
 

이미지를 읽어서 esc키를 누르면 종료, ‘s’ key를 누르면 grayscale 이미지가 저장이 된다. 

728x90
반응형
LIST