Всем привет знатоки, есть функция которая работает достаточно медленно, у меня в распоряжении 72 ядра, хотелось бы услышать рекомендации по оптимизации, в нее приходит rgba не grayscale.
def color_transfer_init(image_with_alpha):
image, image_mask = image_with_alpha[..., :3], image_with_alpha[..., 3]
_, mask_hard = cv2.threshold(
image_mask, MASK_THRESHOLD, 1.0, cv2.THRESH_BINARY)
_x, mask_crop = cv2.threshold(
image_mask, 0.01, 1.0, cv2.THRESH_BINARY)
img_lab = cv2.cvtColor(image, cv2.COLOR_RGB2LAB)
mask = np.uint8(mask_crop)
cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
cnt = sorted(cnts, key=cv2.contourArea)[-1]
x,y,w,h = cv2.boundingRect(cnt)
if h <= w:
h = int(h * 1.8)
elif h * 1.2 <= w:
h = int(h * 1.3)
elif h * 0.8 <= w:
h = int(h * 1.3)
mask_hard = mask_hard[y:y+h, x:x+w]
img_lab = img_lab[y:y+h, x:x+w]
img_rgba = image_with_alpha[y:y+h, x:x+w]
img_mean, img_std = cv2.meanStdDev(
img_lab, mask=mask_hard.astype(np.uint8))
return img_lab, img_mean.reshape((3,)), img_std.reshape((3,)), img_rgba