728x90

1. 이미지 내의 일부분만 모델로 추론하고, 그 일부분을 원래의 이미지 내에 끼워넣기

 

**최종코드

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
import cv2
 
import numpy as np
 
#모델 불러오기
net = cv2.dnn.readNetFromTorch('models/eccv16/la_muse.t7')
#원본 이미지 불러오기
img = cv2.imread('imgs/hw.jpg')
#추론 하려는 이미지만 잘라서 따로 변수에 정의
in_img = img[145:369481:812]
 
#내부 이미지 처리하고 추론하기
h, w, c = in_img.shape
MEAN_VALUE = [103.939116.779123.680]
blob = cv2.dnn.blobFromImage(in_img, mean=MEAN_VALUE)
net.setInput(blob)
output = net.forward()
output = output.squeeze().transpose((120))
output += MEAN_VALUE
output = np.clip(output, 0255)
output = output.astype('uint8')
 
# 원래 이미지 내에서 끼워넣으려는 이미지 위치와 크기 지정해주기
x1=481 #원래 이미지에서 끼워넣을 이미지가 시작되는 시작점 개념
y1=145
x2=x1+332
y2=y1+224
 
img[y1:y2, x1:x2] = output
 
cv2.imshow('img', img)
cv2.waitKey() == ord(27)
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
import cv2
import numpy as np
 
net = cv2.dnn.readNetFromTorch('models/instance_norm/mosaic.t7')
net2 = cv2.dnn.readNetFromTorch('models/instance_norm/candy.t7')
 
img = cv2.imread('imgs/03.jpg')
 
h, w, c = img.shape
img = cv2.resize(img, dsize=(500int(h / w * 500)))
MEAN_VALUE = [103.939116.779123.680]
blob = cv2.dnn.blobFromImage(img, mean=MEAN_VALUE)
net.setInput(blob)
output = net.forward()
output = output.squeeze().transpose((120))
output += MEAN_VALUE
output = np.clip(output, 0255)
output = output.astype('uint8')
 
net2.setInput(blob)
output2 = net2.forward()
output2 = output2.squeeze().transpose((120))
output2 = output2 + MEAN_VALUE
output2 = np.clip(output2, 0255)
output2 = output2.astype('uint8')
 
output3 = np.concatenate([output[:195, :], output2[195:, :]], axis=0)
#세로축 기준으로 자를시에 axis=0 ,  가로축 기준으로 자를시에 axis=1
 
cv2.imshow('output3', output3)
 
cv2.waitKey(0)
cs

**결과이미지

-> 만약에 3개 이상의 모델을 적용하려 한다면, 각각의 모델들을 이미지에 추론하는 것까진 동일하고, 합치는 과정에서의 코드가 아래와 같다.

1
2
3
4
5
6
output = output[0:100, :] #모델 처리를 적용하고자 하는 
output2 = output2[100:200, :]
output3 = output3[200:, :]
 
output4 = np.concatenate([output, output2, output3], axis=0)
 
cs

 

 

 

3. 동영상에 딥러닝 모델 처리하기

**최종코드

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
import cv2
import numpy as np
 
cap = cv2.VideoCapture('imgs/03.mp4')
net = cv2.dnn.readNetFromTorch('models/eccv16/starry_night.t7')
 
while True:
    ret, img = cap.read()
 
    if ret == False
        break
      
    h, w, c = img.shape
    img = cv2.resize(img, dsize=(500int(h / w * 500)))
    MEAN_VALUE = [103.939116.779123.680]
    blob = cv2.dnn.blobFromImage(img, mean=MEAN_VALUE)
    net.setInput(blob)
    output = net.forward()
    output = output.squeeze().transpose((120))
    output += MEAN_VALUE
    output = np.clip(output, 0255)
    output = output.astype('uint8')
 
    cv2.imshow('result', output)
    
    if cv2.waitKey(1== ord('q'):
        break
cs

 

728x90

+ Recent posts