728x90
1. gray scale 영상을 color 처리하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#패키지 로드하기
import cv2
import numpy as np
#모델로드하기
proto = 'models/colorization_deploy_v2.prototxt'
weights = 'models/colorization_release_v2.caffemodel'
#net이라는 변수에 딥러닝 프레임 워크를 선언한다.
net = cv2.dnn.readNetFromCaffe(proto, weights)
pts_in_hull = np.load('models/pts_in_hull.npy')
pts_in_hull = pts_in_hull.transpose().reshape(2, 313, 1, 1).astype(np.float32)
net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull]
net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1, 313), 2.606, np.float32)]
cap = cv2.VideoCapture('videos/video.mp4')
while True:
ret, img = cap.read()
if ret == False:
break
h, w, c = img.shape
img_input = img.copy()
img_input = img_input.astype('float32') / 255.
#이미지 형태 변경
img_lab = cv2.cvtColor(img_input, cv2.COLOR_BGR2Lab)
#l 채널만 걸러내기 , ab의 형태로 이미지를 처리하기
img_l = img_lab[:, :, 0:1]
blob = cv2.dnn.blobFromImage(img_l, size=(224, 224), mean=[50, 50, 50])
net.setInput(blob)
output = net.forward()
#여기까지가 컴퓨터가 이해할 수 있는 언어로 출력된다.
#우리가 알아볼 수 있도록 후처리 해주기
output = output.squeeze().transpose((1, 2, 0))
output_resized = cv2.resize(output, (w, h))
# l과 ab를 합쳐서 lab 시스템의 이미지로 만들어주기
output_lab = np.concatenate([img_l, output_resized], axis=2)
output_bgr = cv2.cvtColor(output_lab, cv2.COLOR_Lab2BGR)
output_bgr = output_bgr * 255
output_bgr = np.clip(output_bgr, 0, 255)
output_bgr = output_bgr.astype('uint8')
cv2.imshow('result', output_bgr)
if cv2.waitKey(1) == ord('q'):
break
|
cs |
2. 오래된 이미지 해상도 향상하고 색복원하기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #패키지 로드하기 import cv2 import numpy as np #모델로드하기 proto = 'models/colorization_deploy_v2.prototxt' weights = 'models/colorization_release_v2.caffemodel' #net이라는 변수에 딥러닝 프레임 워크를 선언한다. net = cv2.dnn.readNetFromCaffe(proto, weights) sr = cv2.dnn_superres.DnnSuperResImpl_create() sr.readModel('models/EDSR_x4.pb') sr.setModel('edsr', 1) pts_in_hull = np.load('models/pts_in_hull.npy') pts_in_hull = pts_in_hull.transpose().reshape(2, 313, 1, 1).astype(np.float32) net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull] net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1, 313), 2.606, np.float32)] img = cv2.imread('imgs/07.jpg') #이미지 추론하기 ( 해당 함수는 전처리와 후처리를 함꺼번에 해준다) result_img = sr.upsample(img) h, w, c = result_img.shape img_input = result_img.copy() img_input = img_input.astype('float32') / 255. #이미지 형태 변경 img_lab = cv2.cvtColor(img_input, cv2.COLOR_BGR2Lab) #l 채널만 걸러내기 , ab의 형태로 이미지를 처리하기 img_l = img_lab[:, :, 0:1] blob = cv2.dnn.blobFromImage(img_l, size=(224, 224), mean=[50, 50, 50]) net.setInput(blob) output = net.forward() #여기까지가 컴퓨터가 이해할 수 있는 언어로 출력된다. #우리가 알아볼 수 있도록 후처리 해주기 output = output.squeeze().transpose((1, 2, 0)) output_resized = cv2.resize(output, (w, h)) # l과 ab를 합쳐서 lab 시스템의 이미지로 만들어주기 output_lab = np.concatenate([img_l, output_resized], axis=2) output_bgr = cv2.cvtColor(output_lab, cv2.COLOR_Lab2BGR) output_bgr = output_bgr * 255 output_bgr = np.clip(output_bgr, 0, 255) output_bgr = output_bgr.astype('uint8') #이미지 출력하기 cv2.imshow('img', img) cv2.imshow('result', output_bgr) cv2.waitKey(0) | cs |
728x90
'Data' 카테고리의 다른 글
매장 정렬 알고리즘(Ranking Algorithm) (1) | 2021.05.12 |
---|---|
크롤링/스크래핑 - Python/BeautifulSoup&Selenium (0) | 2021.03.23 |
[Practice] 이미지 해상도 향상시키기 (3) | 2020.12.25 |
[Practice]흑백 사진의 일부만 컬러처리하기 (0) | 2020.12.25 |
[Practice]흑백사진 컬러처리 하기 (0) | 2020.12.25 |