|
import os, subprocess |
|
import numpy as np |
|
from matplotlib import pyplot as plt |
|
import torch |
|
import cv2 |
|
|
|
|
|
def ensure_dir(path): |
|
if not os.path.exists(path): |
|
os.makedirs(path) |
|
|
|
|
|
def imagesc(nd_array): |
|
plt.figure(figsize=(10, 10)) |
|
plt.imshow(nd_array) |
|
plt.colorbar() |
|
plt.show() |
|
|
|
|
|
def imread(img): |
|
|
|
try: |
|
im = cv2.imread(img) |
|
except Exception as e: |
|
print(e) |
|
return None |
|
im = im[..., ::-1] / 255. |
|
return im |
|
|
|
|
|
def imwrite(img, name): |
|
|
|
cv2.imwrite(name, img[..., ::-1] * 255.) |
|
|
|
|
|
def stereoRead(img: str): |
|
im = imread(img) |
|
H, W, _ = im.shape |
|
assert W % 2 == 0, '%s is not a side-by-side stereo image' % img |
|
left = im[:, :W // 2, ...] |
|
right = im[:, W // 2:, ...] |
|
return left, right |
|
|
|
|
|
def stereoWright(left: np.ndarray, right: np.ndarray, name: str): |
|
im = np.concatenate((left, right), axis=1) |
|
imwrite(im, name) |
|
|
|
|
|
def exeCmd(cmd=None): |
|
print(cmd) |
|
return subprocess.check_call(cmd, shell=True) |
|
|
|
|
|
def img2tensor(img, cuda=True): |
|
img_t = np.expand_dims(img.transpose(2, 0, 1), axis=0) |
|
img_t = torch.from_numpy(img_t.astype(np.float32)) |
|
if cuda: |
|
img_t = img_t.cuda(non_blocking=True) |
|
return img_t |
|
|
|
|
|
def tensor2img(img_t): |
|
if len(img_t.shape) == 4: |
|
img = img_t[0].detach().cpu().numpy() |
|
elif len(img_t.shape) == 3: |
|
img = img_t.detach().cpu().numpy() |
|
else: |
|
raise NotImplementedError |
|
img = img.transpose(1, 2, 0) |
|
return img |
|
|
|
|
|
def cal_padding(L, window_size): |
|
padding_left, padding_right = 0, 0 |
|
if L%window_size != 0: |
|
total = window_size-L%window_size |
|
padding_left = total//2 |
|
padding_right = total - padding_left |
|
return padding_left, padding_right |
|
|
|
def requires_grad(model, flag=True): |
|
for p in model.parameters(): |
|
p.requires_grad = flag |
|
|