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(231311).astype(np.float32)
net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull]
 
net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1313), 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=(224224), mean=[505050])
 
    net.setInput(blob)
    output = net.forward()
    #여기까지가 컴퓨터가 이해할 수 있는 언어로 출력된다.
 
    #우리가 알아볼 수 있도록 후처리 해주기
    output = output.squeeze().transpose((120))
 
    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, 0255)
    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(231311).astype(np.float32)
net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull]
 
net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1313), 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=(224224), mean=[505050])
 
net.setInput(blob)
output = net.forward()
#여기까지가 컴퓨터가 이해할 수 있는 언어로 출력된다.
 
#우리가 알아볼 수 있도록 후처리 해주기
output = output.squeeze().transpose((120))
 
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, 0255)
output_bgr = output_bgr.astype('uint8')
 
 
#이미지 출력하기
cv2.imshow('img', img)
cv2.imshow('result', output_bgr)
cv2.waitKey(0)
 
cs

 

728x90

+ Recent posts