文章目录
前言
风格迁移(Style Transfer)是计算机视觉领域的一项突破性技术,它通过算法将一幅图像的内容与另一幅图像的艺术风格相结合。这项技术自2015年Gatys等人提出神经网络风格迁移算法以来,在艺术创作、图像处理和移动应用开发等领域获得了广泛应用。
一、风格迁移
1、风格迁移是什么?
风格迁移是一种计算机视觉技术,通过将一幅图像的风格与另一幅图像的内容结合,生成一个新的图像。
在OpenCV中,风格迁移通常使用神经网络来实现。
2、步骤
1)训练
首先,使用一幅参考图像作为"风格图像"和一幅目标图像作为"内容图像",训练一个神经网络模型。训练过程中,网络学习如何将内容图像的内容与风格图像的风格进行组合。
2)迁移
一旦模型训练完成,就可以使用该模型将任意图像的内容与风格进行迁移。在迁移过程中,网络会将输入图像的内容与风格图像的风格进行匹配,并生成一个新的图像,该图像具有输入图像的内容和风格图像的风格。
二、DNN模块
1、什么是DNN模块
DNN模块是 OpenCV 中专门用来实现 DNN(Deep Neural Networks,深度神经网络) 模块的相关功能,其作用是载入别的深度学习框架(如 TensorFlow、Caffe、Torch 等)中已经训练好的模型,然后用该模型完成预测等工作。
2、DNN模块特点
-
轻量
OpenCV 的深度学习模块只实现了模型推理功能,不涉及模型训练,这使得相关程序非常精简,加速了安装和编译过程。
-
外部依赖性低
重新实现一遍深度学习框架使得 DNN 模块对外部依赖性极低,极大地方便了深度学习应用的部署。
-
方便
在原有 OpenCV 开发程序的基础上,通过 DNN 模块可以非常方便地加入对神经网络推理的支持。
-
集成
若网络模型来自多个框架,如一个来自 TensorFlow,另外一个来自 Caffe,则 DNN 模块可以方便地对网络进行整合。
-
通用性
DNN 模块提供了统一的接口来操作网络模型,内部做的优化和加速适用于所有网络模型格式,支持多种设备和操作系统。
3、流程图

4、图像预处理功能
将需要处理的图像转换成可以传入人工神经网络的数据形式。 DNN 模块中的函数 blobFromlmage 完成图像预处理,从原始图像构建一个符合人工神经网络输入格式的四维块。 它通过调整图像尺寸和裁图像、减均值、按比例因子缩放、交换 B 通道和R通道等可选操作完成对图像的预处理,得到符合人工神经网络输入的目标值。
三、案例实现
1、数据预处理
python
import cv2
# 读取输入图像
image = cv2.imread('R-C.jpg')
image = cv2.resize(image,dsize=None,fx=0.5,fy=0.5)
# 显示输入图像
cv2.imshow('yuan tu',image)
cv2.waitKey(0)
'''---------------图片预处理-------------------'''
(h,w) = image.shape[:2] #获取图片尺寸
blob = cv2.dnn.blobFromImage(image,1,(w,h),(0,0,0),swapRB = False,crop = False)
2、加载模型
- 使用.readNet()读取风格迁移的模型
- 将上一步处理之后的图片传入模型
- 向前传播得到处理之后的数据
python
'''-----------------加载模型------------------------'''
net = cv2.dnn.readNet(r'model\starry_night.t7') #得到一个pytorch训练之后的星空模型
net.setInput(blob)
# 对输入图像进行向前传播,得到输出结果
out = net.forward()
# 将输出结果转换为合适的格式
# out是四维的:B*C*H*W
# ======输出处理=======
# 重塑形状(忽略第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.transpose(1,2,0)
# 显示转换后的图像
cv2.imshow('Stylized Image',result)
cv2.waitKey(0)
# cv2.destroyAllWindows()

总结
通过OpenCV实现风格迁移,开发者可以在平衡性能和效果的同时,快速构建实用的图像处理应用。无论是想要为移动应用添加实时滤镜功能,还是开发专业的艺术创作工具,OpenCV都提供了从简单到复杂的多层级解决方案。随着边缘计算设备性能的提升,风格迁移技术正在从实验室走向实际应用,开启计算机视觉与数字艺术结合的新篇章。