(img, d=31)
| 41 | |
| 42 | |
| 43 | def blur_edge(img, d=31): |
| 44 | h, w = img.shape[:2] |
| 45 | img_pad = cv2.copyMakeBorder(img, d, d, d, d, cv2.BORDER_WRAP) |
| 46 | img_blur = cv2.GaussianBlur(img_pad, (2*d+1, 2*d+1), -1)[d:-d,d:-d] |
| 47 | y, x = np.indices((h, w)) |
| 48 | dist = np.dstack([x, w-x-1, y, h-y-1]).min(-1) |
| 49 | w = np.minimum(np.float32(dist)/d, 1.0) |
| 50 | return img*w + img_blur*(1-w) |
| 51 | |
| 52 | def motion_kernel(angle, d, sz=65): |
| 53 | kern = np.ones((1, d), np.float32) |