您的位置:首页 > 财经 > 金融 > 自己的公众号_html5软件安装视频_网络黄页推广大全_谷歌网站优化

自己的公众号_html5软件安装视频_网络黄页推广大全_谷歌网站优化

2024/11/17 17:31:56 来源:https://blog.csdn.net/weixin_65047977/article/details/143063186  浏览:    关键词:自己的公众号_html5软件安装视频_网络黄页推广大全_谷歌网站优化
自己的公众号_html5软件安装视频_网络黄页推广大全_谷歌网站优化

目录

前言

一、代码及步骤解释

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()

输出:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com