이미지를 저장하는 방법
색을 표현하는 방식(color space)
파이썬 이미지 처리 라이브러리
import numpy as np
from PIL import Image
data = np.zeros([32, 32, 3], dtype=np.unit8)
image = Image.fromarray(data, 'RGB') # 만들어진 배열을 이미지객체로 변환
image.show()
data[:, :] = [255, 0, 0]
image = Image.fromarray(data, 'RGB')
image.show()
import os
from PIL import Image
# 연습용 파일 경로
image_path = os.getenv('HOME')+'/aiffel/python_image_proc/pillow_practice.png'
# 이미지 열기
image = Image.open(image_path)
image.show()
# width와 height 출력
print(image.width)
print(image.height)
# JPG 파일 형식으로 저장해보기
new_image_path = image_path.split('.')
new_image_path[1] = 'jpg'
new_image_path = '.'.join(new_image_path)
image = image.convert('RGB')
image.save(new_image_path)
img_resize = image.resize((100, 200))
resize_image_path = os.getenv('HOME')+'/aiffel/python_image_proc/pillow_practice_resize.png'
img_resize.save(resize_image_path)
img_crop = image.crop((300, 100, 600, 400))
crop_image_path = os.getenv('HOME')+'/aiffel/python_image_proc/pillow_practice_crop.png'
img_crop.save(crop_image_path)
import os
import pickle
dir_path = os.getenv('HOME')+'/aiffel/python_image_proc/cifar-100-python'
train_file_path = os.path.join(dir_path, 'train')
with open(train_file_path, 'rb') as f:
train = pickle.load(f, encoding='bytes')
print(type(train)) # <class 'dict'>
print(train.keys()) # dict_keys([b'filenames', b'batch_label', b'fine_labels', b'coarse_labels', b'data'])
print(type(train[b'filenames'])) # list
print(train[b'filenames'][0:5])
# [b'bos_taurus_s_000507.png',
# b'stegosaurus_s_000125.png',
# b'mcintosh_s_000643.png',
# b'altar_boy_s_001435.png',
# b'cichlid_s_000031.png']
print(train[b'data'][0:5])
# array([[255, 255, 255, ..., 10, 59, 79],
# [255, 253, 253, ..., 253, 253, 255],
# [250, 248, 247, ..., 194, 207, 228],
# [124, 131, 135, ..., 232, 236, 231],
# [ 43, 32, 87, ..., 60, 29, 37]], dtype=uint8)
print(train[b'data'][0].shape) # (3072, )
np.reshape(order)
: order라는 인자에 F
라는 값을 주면 원하는 형태로 진행된다.image_data = train[b'data'][0].reshape([32,32,3], order='F')
image_data = image_data.swapaxes(0, 1) # x축, y축 바꿔줌
image = Image.fromarray(image_data)
image.show()
컴퓨터 비전용 라이브러리
import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
# define range of blue color in HSV
# H : 110~130, S&V = 50~255 => blue color
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
# frame영상을 변환한 hsv에다 기준들(lower_blue, upper_blue)을 적용하여,
# 해당하는 픽셀들에는 1, 아닌 픽셀들에는 0을 찍어놓은 배열을 반환
# mask 크기 = 400*300(*1)
mask = cv.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
# 이미지 두장을 받아서 AND 비트 연산을 한다는건데, 이 기능이 필요한게 아니므로,
# 두 장 다 같은 이미지(frame,frame)를 넣어 결국 동일한 이미지가 나오게 한다.
# dst가 주어진다면 그 위에, 아니면 새로 빈 검정색 영역 위에 이미지를 만들고 반환
res = cv.bitwise_and(frame,frame, mask= mask)
cv.imshow('frame',frame) # 카메라에서 받아온 이미지
cv.imshow('mask',mask) # 파란색 영역만 골라낸 마스크
cv.imshow('res',res) # 이미지에 마스크를 적용한 결과
# 5초간 키 입력을 감지하고, 키 입력이 특정 키(27번 = ESC)가 되면
# 처음의 무한 루프(while 1)에서 빠져나오고,
# 아니라면 다시 위로 돌아가서 카메라를 읽는 부분부터 반복.
k = cv.waitKey(5) & 0xFF
if k == 27:
break
cv.destroyAllWindows()
cap.release()