File size: 2,105 Bytes
c509e76 |
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 62 63 64 65 66 67 68 |
import cv2
import numpy as np
import glob
import os
from tqdm import tqdm
import random
im_paths = glob.glob('./img/*/*')
random.shuffle(im_paths)
for im_path in tqdm(im_paths):
# im_path = './img/1/23-180_5-y4_Page_034-wVO0001-L1_3-T_6600-I_5535.png'
if '-L1_' in im_path:
alb_path = im_path.split('-L1_')[0].replace('img/','alb/') + '.png'
else:
alb_path = im_path.split('-L2_')[0].replace('img/','alb/') + '.png'
if not os.path.exists(alb_path):
print(im_path)
print(alb_path)
im = cv2.imread(im_path)
alb = cv2.imread(alb_path)
_, mask = cv2.threshold(cv2.cvtColor(alb,cv2.COLOR_BGR2GRAY), 1, 255, cv2.THRESH_BINARY)
## clean
# std = np.max(np.std(alb,axis=-1))
# print(std)
im_min = np.min(im,axis=-1)
kernel = np.ones((3,3))
mask_erode = cv2.dilate(mask,kernel=kernel)
mask_erode = cv2.erode(mask_erode,kernel=kernel)
mask_erode = cv2.erode(mask_erode,iterations=4,kernel=kernel)
metric = np.min(im_min[mask_erode==255])
metric_num = 0
if metric==0 or metric==1:
metric_num = np.sum(im_min[mask_erode==255]==metric)
if metric_num>=20:
alb_temp = alb.astype(np.float64)
alb_temp[alb_temp==0] = alb_temp[alb_temp==0]+1e-5
shadow = np.clip(im.astype(np.float64)/alb_temp,0,1)
shadow = (shadow*255).astype(np.uint8)
shadow_path = im_path.replace('img/','temp/')
cv2.imwrite(shadow_path,shadow)
continue
alb_temp = alb.astype(np.float64)
alb_temp[alb_temp==0] = alb_temp[alb_temp==0]+1e-5
shadow = np.clip(im.astype(np.float64)/alb_temp,0,1)
shadow = (shadow*255).astype(np.uint8)
shadow_path = im_path.replace('img/','shadow/')
cv2.imwrite(shadow_path,shadow)
mask_path = im_path.replace('img/','mask/')
cv2.imwrite(mask_path,mask)
# cv2.imshow('im',im)
# cv2.imshow('alb',alb)
# cv2.imshow('shadow',shadow)
# cv2.imshow('mask_erode',mask_erode)
# print(im_min[mask_erode==255])
# print(metric,metric_num)
# cv2.waitKey(0) |