U2Net与LaMa相结合

U2Net与LaMa相结合

  • U2Net
  • LaMa
  • U2Net与LaMa相结合
  • 注意:会出现读图像/保存图片/图像转换为矩阵等问题
  • Python 三种主要的图像处理库,加载图片区别:
    • (1)OpenCV2与PIL读图片、显示图片
    • (2)OpenCV2与PIL保存图片
    • (3)OpenCV2与PIL相互转换
    • (4)png转为jpg

U2Net

  • 论文:U^2-Net: Going Deeper with Nested U-Structure for Salient Object Detection
  • github代码地址:https://github.com/NathanUA/U-2-Net
  • 应用:人像转素描,抠图、背景去除等。
  • 简介可参考:
    https://code84.com/26706.html

LaMa

  • 论文:LaMa: Resolution-robust Large Mask Inpainting with Fourier Convolutions
  • github代码地址:https://github.com/saic-mdal/lama
  • 简介可参考:https://blog.csdn.net/qq_42951560/article/details/126528156
  • 代码可参考:
    (1)https://github.com/saic-mdal/lama/issues
    (2)https://github.com/1024803482/Inpainting-Demo-Lama/issues
  • 应用可参考:
    https://huggingface.co/spaces/akhaliq/lama

U2Net与LaMa相结合

(1)原图像输入到预训练好的U2Net中,得到显著性目标图像 + Mask图像
(2)原图像 + Mask图像输入到预训练好的LaMa中,得到原图除去显著性目标后的 修补后图像

注意:会出现读图像/保存图片/图像转换为矩阵等问题

Python 三种主要的图像处理库,加载图片区别:

skimage
opencv-python
Pillow PIL
三者加载图片的区别,可参考:https://www.aiuai.cn/aifarm1895.html
这里展示,部分加载后的矩阵:

import skimage.io as io
import cv2 
from PIL import Image

import numpy as np
import matplotlib.pyplot as plt

# skimage
img_io = io.imread('test.jpg') 
print(type(img_io), img_io.shape)
#np.ndarray,  (H x W x C), [0, 255],RGB

# opencv
img_cv2 = cv2.imread('test.jpg')
print(type(img_cv2), img_cv2.shape)
#np.array, (H x W xC), [0, 255], BGR

# PIL
img_pil = Image.open('test.jpg')
img_array = np.array(img_pil)
print(type(img_array), img_array.shape)
# (H x W x C), [0, 255], RGB

plt.figure(figsize=(10, 10))
for i, img in enumerate([img_io, img_cv2, img_array]):
    plt.subplot(1, 3, i + 1)
    plt.imshow(img)
plt.show()

(1)OpenCV2与PIL读图片、显示图片

  • OpenCV2
(1)读图片:
	cv2.imread() ,且读取的通道顺序为BGR
(2)显示图片:
	cv2.imshow()采用BGR模式
  • PIL
(1)读图片:
	Image.open(),且读取的通道顺序是RGB,H x W x C 格式
		!!!补充:PIL函数读图片需结合np.array(img)或者np.asarray(img)使用,array函数会copy一个新的副本,占用新的空间,asarray不会。即:np.array(Image.open(fname).convert(mode))  。将图片转化为uint8的数值数组形式,数值范围在0-255之间。
		!!!补充:由于Pytorch中,图片张量形式是 C x H x W,所以:
一般PIL读完图像(H x W x C 格式),需要将其:转置为C x H x W格式,(归一化至0-1),转换成tensor输入进模型中
	img = np.array(Image.open(path)).transpose(2, 0, 1)  # 将H x W x C表示为C x H x W
	img1 = torch.tensor(img / 255)  # 若需要归一化,则除以255
(2)显示图片:
	img.show() 采用RGB模式
		!!!注意:matplotlib.pyplot: plt.imshow() 采用RGB模式

(2)OpenCV2与PIL保存图片

(1)OpenCV2保存图片:
		cv2.imwirte()保存图片,默认将图像由BGR2RGB保存下来
(2)PIL保存图片:
		!!!补充:tensor转成图像保存
		# 这里将tensor形式用numpy()函数转为数组形式,
 # 并且用transpose将数组转置为PIL能够处理的WxHxC形式。
		img = img.numpy().transpose(1,2,0)
		img = img * 255 # 若做了归一化,则乘255
		# 两种方法使用fromarray()函数。uint8函数
		# 第一种
		Image.fromarray(np.uint8(img)) # uint8是图片的数值形式。
		# 第二种
		Image.fromarray(img.astype(np.uint8))#eg2
		PIL.Image.save(img)直接保存RGB的图片

(3)OpenCV2与PIL相互转换

(1)PIL.Image转OpenCV2:
		PIL.Image读图片需结合np.array(),因此:图像读-np.array()-转opencv
		cv2_img = cv2.cvtColor(numpy.asarray(Img_img),cv2.COLOR_RGB2BGR)
(2)OpenCV2转PIL.Image:
		OpenCV2读取的图像为BGR,
		pil_img = Image.fromarray(cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB))	

(4)png转为jpg

im = Image.open("geeksforgeeks.png")
rgb_im = im.convert("RGB")

你可能感兴趣的:(机器学习与深度学习AI,python,开发语言)