在图像处理中,一张图像的旅行是怎么进行的呢?(本故事依据真实代码改编)
1.图像的来源:input_path,到图像家把图像喊出来。通常找OPENCV、PIL去喊比较有成效:
- OPENCV: 直接返回numpy.ndarray(),其通道为BGR,HWC,0~255取值
img=cv2.imread() #直接返回numpy.ndarray(),其通道为BGR,HWC,0~255取值
img=cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #BGR转RGB
- PIL图像: 直接返回numpy.ndarray(),其通道为RGB(后续)
2.图像的归一化:img/255.0 img/27.5-1,便于后续处理
img=img/255.0 #图像归一化,范围[ 0,1]
img=img/127.5-1 #图像归一化,范围[-1,1]
3.图像的变形:图像好不容易来到网络家,发现进不了网络家的门哇!Resize来帮忙!利用scale、interpolation对图像进行缩放。
4.图像的标准化:welcome,图像来到网络家,那么得遵守网络家得规范哇,先把自己标准化一下,标准化就可以:以不变应万变啦。标准化的数值都很固定啦~
normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])
5.图像的表示:标准化的图像,发现网络家的一系列操作都是对长宽要求多,把通道放前面,大家通道都一样为3啦~这里请来了transpose进行置换!
6.图像的加工:网络家的修理师傅,都是来自pytorch家族,需要进行numpy的array与torch的tensor互相转换,第一次加工,当然就是numpy的array到pytorch的torch~
sample = torch.from_numpy(img_input).to(device).unsqueeze(0)
torch.from_numpy() #numpy中的ndarray转化成pytorch中的tensor
numpy() #pytorch中的tensor转化成numpy中的ndarray
7.图像的输出:加工完的图像,变化大不一样,但是他要是回得了家,还是得恢复原来的摸样呀!至少尺寸不能短斤少两把~那么就得保护好处理后的图像,同时还原图像的尺寸。
一趟旅行就结束啦~