0. Package
import cv2 import matplotlib.pyplot as plt import numpy as np import torchvision.transforms.functional as F
1. CV2 Image -> PLT Image (Print)
(100,200,3 : BGR) -> (100,200,3 : RGB)
# imshow function (cv2 image -> plt image -> plt.show)
# cv2 image를 plt image로 출력
def imshow(in_img):
out_img = cv2.cvtColor(in_img,cv2.COLOR_BGR2RGB)
plt.figure(figsize=(5,5))
plt.imshow(out_img)
plt.axis('off')
plt.show()
2. Tensor Image -> PLT Image (Print)
(3,64,64 : RGB) -> (64,64,3 : RGB)
def timshow(img):
img=img.permute(1,2,0)
plt.figure(figsize=(5,5))
plt.imshow(img)
plt.axis('off')
plt.show()
3. Normalized Tensor -> CV2 Image (Convert)
(3,64,64 : RGB, Normalized), (mean,std : RGB) -> (64,64,3 : BGR)
# RGB로 구한 평균, 표준편차 -> BGR로 구한 평균, 표준편차
def cv2_infor(tmean,tstd):
cmean,cstd=tmean.clone(),tstd.clone()
cmean[0],cmean[2]=tmean[2],tmean[0]
cstd[0],cstd[2]=tstd[2],tstd[0]
return cmean,cstd
def tensor_to_cv_img(data, mean, std):
# RGB mean, std -> BGR mean,std
mean,std=cv2_infor(mean,std)
MEAN, STD = mean.numpy(),std.numpy()
# tensor to cv
img = data # Tensor Shape. [C, H, W]
img = img.detach().cpu().numpy() # tensor -> numpy
img = np.transpose(img, (1, 2, 0)) # [C,H,W] -> [H,W,C]
img = np.clip(255.0 * (img * STD + MEAN), 0, 255) # denomalize
img = img.astype(np.uint8).copy() # np.float32 -> np.uint8
return img
4. CV2 Image -> Normalized Tensor (Convert)
(100,200,3 : BGR), (mean=0.5, std=0.5 : RGB) -> (3,64,64 : RGB, Normalized)
def cv2img_to_tensor(src):
# resizing
img=cv2.resize(src, (64, 64), interpolation=cv2.INTER_AREA)
# cv2 to plt
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
# plt to tensor and normalization
torch_img=F.to_tensor(img)
torch_img=F.normalize(torch_img, mean=0.5, std=0.5)
# edit shape
output=torch_img.view(3,64,64).to(device)
return output
Example Code: [GitHub]