自学内容网 自学内容网

机器学习:opencv--风格迁移

目录

前言

一、代码及步骤解释

1.图片与处理

2.加载模型

3.输出图像


前言

        风格迁移(Style Transfer)是一种计算机视觉技术,旨在将一种图像的艺术风格应用到另一种图像上,同时保持其内容。

 

一、代码及步骤解释

1.图片与处理

  • 传入图片,使用opencv里的dnn神经网络模型对图片进行处理,改变图片的维度
  • 图片张数,通道数,高,宽
import cv2

"""图片风格迁移"""
img = cv2.imread('huanghelou1.JPG')
img = cv2.resize(img, (500, 500))
cv2.imshow('img', img)
cv2.waitKey(0)

# 图片预处理
(h, w) = img.shape[:2]
blob = cv2.dnn.blobFromImage(img, 1, (w, h), (0, 0, 0), swapRB=True)  # 改变图像格式 B C H W
# blob = cv2.dnn.blobFromImage(image, scalefactor=None, size=None, mean=None, swapRB=None, crop=None)
# 参数:
#       image:表示输入图像。
#       scalefactor:表示对图像内的数据进行缩放的比例因子。具体运算是每个像素值*scalefactor,该值默认为 1。
#       size:用于控制blob的宽度、高度。
#       mean:表示从每个通道减去的均值。 (0,0,0):表示不进行均值减法。即不对图像的B、G、R通道进行任何减法操作。
#               若输入图像本身是B、G、R通道顺序的,并且下一个参数swapRB值为True,
#               则mean值对应的通道顺序为R、G、B。:opencv BGR RGB
#       swapRB:表示在必要时交换通道的R通道和B通道。一般情况下使用的是RGB通道。而openCV通常采用的是BGR通道
#               因此可以根据需要交换第1个和第3个通道。该值默认为 False。
#       crop:布尔值,如果为True:则在调整大小后进行居中裁剪
# 返回值:blob: 表示在经过缩放、裁剪、减均值后得到的符合人工神经网络输入的数据。该数据是一个四维数据,
#           布局通常使用N(表示batch size)、C(图像通道数,如RGB图像具有三个通道)、H(图像高度)、W(图像宽度)表示

 

2.加载模型

风格迁移模型

  1. 使用.readNet()读取风格迁移的模型
  2. 将上一步处理之后的图片传入模型
  3. 向前传播得到处理之后的数据
# 加载模型
net = cv2.dnn.readNet(r'model/la_muse.t7')  # readNet 通用读取模型 不论后缀
net.setInput(blob)  # 将图片传入模型
out = net.forward()  # 向前传播

 

3.输出图像

  1. 上一步骤输出的数据还是四维的,
  2. 使用.reshape()进行转换
  3. 因为输出的数据里有负值,所以使用归一化处理
  4. 然后将其进行转置 变成 (高 宽 通道数)的形式  让opencv能够输出
# 重塑形状(忽略第1维),4维变3维
# 调整输出out的形状,模型推理输出out是四维BCHW形式的,调整为三维CHW形式
out_new = out.reshape(out.shape[1], out.shape[2], out.shape[3])
# 对输入的数组(或图像)进行归一化处理,使其数值范围在指定的范国内
cv2.normalize(out_new, out_new, norm_type=cv2.NORM_MINMAX)  # 输入数组 输出数组  归一化类型
# 转置输出结果的维度
# result = out_new
result = out_new.transpose(1, 2, 0)  # 将图像转置成 高 宽 通道数 符合opencv的格式
# 显示转换后的图像
cv2.imshow('stylized Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出:


原文地址:https://blog.csdn.net/weixin_65047977/article/details/143063186

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!