change folders
This commit is contained in:
133
Karussell/utils/functions_shield.py
Normal file
133
Karussell/utils/functions_shield.py
Normal file
@@ -0,0 +1,133 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
import os
|
||||
|
||||
# Read shield with alpha channel
|
||||
def readAlpha(path):
|
||||
src = cv2.imread(path, cv2.IMREAD_UNCHANGED)
|
||||
src = cv2.cvtColor(src, cv2.COLOR_BGRA2RGBA)
|
||||
# b, g, r, alpha = cv2.split(src)
|
||||
# dst1 = cv2.merge((b, g, r))
|
||||
# alpha = cv2.cvtColor(alpha, cv2.COLOR_GRAY2BGR)
|
||||
# dst1_64 = dst1.astype(np.float64)
|
||||
# alpha_64 = alpha.astype(np.float64)
|
||||
# alpha_64 *= 1./255.
|
||||
# dst2_64 = np.multiply(dst1_64, alpha_64)
|
||||
# dst2 = dst2_64.astype(np.uint8)
|
||||
return src
|
||||
|
||||
# Read shield with alpha channel and points
|
||||
def readShield(path, step_board=0):
|
||||
pict = readAlpha(path)
|
||||
h_pict = pict.shape[0]
|
||||
w_pict = pict.shape[1]
|
||||
pts_pict = np.array(
|
||||
[[step_board, step_board], [w_pict - step_board, step_board], [w_pict - step_board, h_pict - step_board],
|
||||
[step_board, h_pict - step_board]])
|
||||
return pict, pts_pict
|
||||
|
||||
def ReadShields(shield_album):
|
||||
picts_paths = []
|
||||
f = open(shield_album)
|
||||
for g in f:
|
||||
if g[-1] == '\n':
|
||||
picts_paths.append(g[:-1])
|
||||
else:
|
||||
picts_paths.append(g)
|
||||
f.close()
|
||||
# print(picts_paths)
|
||||
picts = []
|
||||
pts_picts = []
|
||||
for shield_path in picts_paths:
|
||||
pict, pts_pict = readShield(shield_path)
|
||||
picts.append(pict)
|
||||
pts_picts.append(pts_pict)
|
||||
return picts, pts_picts
|
||||
|
||||
def ReadShieldsAni(shield_album):
|
||||
picts_paths = []
|
||||
# filelist = os.listdir(shield_album)
|
||||
# for g in filelist:
|
||||
# picts_paths.append(shield_album + "/" + g)
|
||||
# # print(picts_paths)
|
||||
picts = []
|
||||
pts_picts = []
|
||||
for i in range(0,55):
|
||||
str_i = str(i).zfill(4)
|
||||
pict, pts_pict = readShield(shield_album + "/frame_"+str_i+".png")
|
||||
picts.append(pict)
|
||||
pts_picts.append(pts_pict)
|
||||
return picts, pts_picts
|
||||
|
||||
# Overaling transformed shield on frame
|
||||
def overlaying(pict, img, pts_pict, pts_frame, part=1.0):
|
||||
# Homography
|
||||
# h, status = cv2.findHomography(pts_pict, pts_frame)
|
||||
|
||||
|
||||
|
||||
# x1 = int(pts_frame[0][1])
|
||||
# if x1 < 0:
|
||||
# x1 = 0
|
||||
# x2 = int(pts_frame[2][1])
|
||||
# y1 = int(pts_frame[0][0])
|
||||
# if y1 < 0:
|
||||
# y1 = 0
|
||||
# y2 = int(pts_frame[2][0])
|
||||
|
||||
(y1, x1), (y2, x2) = pts_frame.min(axis=0), pts_frame.max(axis=0)
|
||||
if (x2 - x1) > 50 and (y2 - y1) > 50:
|
||||
try:
|
||||
area = img[x1:x2, y1:y2]
|
||||
# rows, cols, channels = area.shape
|
||||
|
||||
b, g, r, alpha = cv2.split(pict)
|
||||
pict_rgb = cv2.merge((r, g, b))
|
||||
|
||||
h, status = cv2.findHomography(pts_pict, pts_frame)
|
||||
imgWarp = cv2.warpPerspective(pict_rgb, h, (img.shape[1], img.shape[0]))
|
||||
alphaWarp = cv2.warpPerspective(alpha, h, (img.shape[1], img.shape[0]))
|
||||
pict_area = imgWarp[x1:x2, y1:y2]
|
||||
alpha_area = alphaWarp[x1:x2, y1:y2]
|
||||
|
||||
# pict = cv2.resize(pict, (cols, rows))
|
||||
|
||||
znam = 1./255.
|
||||
alpha_area = cv2.cvtColor(alpha_area, cv2.COLOR_GRAY2BGR)
|
||||
pict_32 = pict_area.astype(np.float32)
|
||||
area_32 = area.astype(np.float32)
|
||||
alpha_32 = alpha_area.astype(np.float32)
|
||||
alpha_32 *= znam
|
||||
if part != 1.:
|
||||
alpha_32 *= part
|
||||
alpha_nega_32 = 1. - alpha_32
|
||||
dst1_32 = np.multiply(pict_32, alpha_32)
|
||||
dst2_32 = np.multiply(area_32, alpha_nega_32)
|
||||
dst_32 = dst1_32 + dst2_32
|
||||
img[x1:x2, y1:y2] = dst_32.astype(np.uint8)
|
||||
|
||||
# Warp transform shield
|
||||
# imgWarp = cv2.warpPerspective(pict_rgb, h, (img.shape[1], img.shape[0]))
|
||||
# alphaWarp = cv2.warpPerspective(alpha, h, (img.shape[1], img.shape[0]))
|
||||
|
||||
# Placing sheild on frame
|
||||
# imgAug = cv2.addWeighted(img, 1.0, imgWarp, 0.5, 0.0)
|
||||
except:
|
||||
pass
|
||||
|
||||
return img
|
||||
|
||||
def applistShields(album_paths):
|
||||
picts_paths = []
|
||||
picts_names = []
|
||||
f = open(album_paths)
|
||||
for g in f:
|
||||
if g[-1] == '\n':
|
||||
picts_paths.append(g[:-1])
|
||||
else:
|
||||
picts_paths.append(g)
|
||||
f.close()
|
||||
for path in picts_paths:
|
||||
name = path.split('.')[0].split("/")[1]
|
||||
picts_names.append(name)
|
||||
return picts_paths, picts_names
|
||||
Reference in New Issue
Block a user