图像前后处理代码
文章目录
- 前言
- 1、背景
- 2、代码
- 总结
前言
本篇提供一段在计算机视觉中常用的图像前后处理代码。比如许多开源项目中用到了RGB转换,resize、归一化以及转张量维度变化操作。当尝试使用这些项目时,可视化不方便,因此,本文提供跑一个demo样例,以供记录。
1、背景
我这里以我项目用到的前处理为例:opencv读取图像,变形的resize,norm,转RGB,维度变化转张量。接下来,我将提供一段代码,将上述张量还原回原始图像。
以coco为例,底下是原图:
经过前处理后变成640*640归一化的图像。
2、代码
import cv2
import torch
import numpy as np
post_img_tensor = result['img'].data # 这是经过变化后的张量
# 逆归一化
mean = torch.tensor([123.675, 116.28, 103.53], dtype=torch.float32).view(3, 1, 1)
std = torch.tensor([58.395, 57.12, 57.375], dtype=torch.float32).view(3, 1, 1)
original_tensor = post_img_tensor.cpu().float() * std + mean
original_tensor = original_tensor.to(torch.uint8)
original_np = original_tensor.permute(1, 2, 0).numpy() # hwc, numpy array
resized_image = cv2.cvtColor(original_np, cv2.COLOR_RGB2BGR)
scale_factor = result['scale_factor'] # arr: [w_ratio, h_ratio, w_ratio, h_ratio]
w_ratio , h_ratio = scale_factor[:2]
src_img = cv2.resize(resized_image, dsize = ((int(resized_image.shape[1]/w_ratio), int(resized_image.shape[0]//h_ratio))), interpolation=cv2.INTER_LINEAR)
cv2.imwrite('./demo.jpg', src_img)
总结
这里只是提供一个样板,不过基本上已经包含大多数前处理流程,读者可自行更改一些参数来实现逆操作。