in utils/videowriter.py [0:0]
def writeimage(randid, itemnum, outputs, **kwargs):
imgout = []
for k in outputs:
data = outputs[k]
if isinstance(data, str):
img = imgout[-1].permute(1, 2, 0).data.numpy().copy('C')
cv2.putText(img, data, (20, 60), cv2.FONT_HERSHEY_SIMPLEX, 2, (255, 0, 255), 2)
imgout[-1] = torch.from_numpy(img).permute(2, 0, 1)
elif len(data.size()) == 3 and data.size(0) == 3: # rgb image
data = data * torch.tensor(kwargs["colcorrect"][:, None, None])
imgout.append(data)
elif len(data.size()) == 3 and data.size(0) == 1: # 1 channel image
cmap = kwargs["cmap"]
cmapscale = kwargs["cmapscale"]
colorbar = kwargs["colorbar"]
if cmap is None:
imgout.append(data.repeat(3, 1, 1))
else:
cmap = cm.get_cmap(cmap)
colors = cmap.colors if isinstance(cmap, matplotlib.colors.ListedColormap) else cmap(range(256))
colors = torch.tensor(colors, device=data.device).permute(1, 0)
indices = (data[0] * 255. / cmapscale).clamp(min=0., max=255.).long()
data = colors[:, indices][:3, :, :] * 255.
if colorbar is not None:
data = torch.cat([
data,
torch.zeros(3, data.size(1), colorbar.size(2), device=data.device)
], dim=2)
cbarstarty = data.size(1)//2 - colorbar.size(1)//2
data.data[:, cbarstarty:cbarstarty+colorbar.size(1), -colorbar.size(2):] = \
colorbar[:3, :, :]
imgout.append(data)
elif len(data.size()) == 3 and data.size(0) == 2: # flow field?
yvals, xvals = torch.meshgrid(
torch.linspace(-1., 1., 128, device=data.device),
torch.linspace(-1., 1., 128, device=data.device))
vals = torch.stack([xvals, yvals], axis=-1)
data[:, :128, :128].data = vals
imgout.append(flow_compute_color(data))
imgout = resizecat(imgout, dim=2)
if imgout.size(2) % 2 != 0:
imgout = imgout[:, :, :-1]
if imgout.size(1) % 2 != 0:
imgout = imgout[:, :-1, :]
# apply gamma
imgout = ((imgout / 255.) ** (1. / 1.8) * 255.).clamp(min=0., max=255.).byte()
# CHW -> HWC
imgout = imgout.permute(1, 2, 0)
imgout = imgout.data.to("cpu").numpy()
Image.fromarray(imgout).save("{}/{:06}.png".format(randid, itemnum))