当前位置: 首页 > news >正文

OpenCV进阶操作:风格迁移以及DNN模块解析

文章目录

  • 前言
  • 一、风格迁移
    • 1、风格迁移是什么?
    • 2、步骤
      • 1)训练
      • 2)迁移
  • 二、DNN模块
    • 1、什么是DNN模块
    • 2、DNN模块特点
    • 3、流程图
    • 4、图像预处理功能
  • 三、案例实现
    • 1、数据预处理
    • 2、加载模型
  • 总结


前言

风格迁移(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、数据预处理

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()读取风格迁移的模型
  • 将上一步处理之后的图片传入模型
  • 向前传播得到处理之后的数据
'''-----------------加载模型------------------------'''
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都提供了从简单到复杂的多层级解决方案。随着边缘计算设备性能的提升,风格迁移技术正在从实验室走向实际应用,开启计算机视觉与数字艺术结合的新篇章。

相关文章:

  • 基于STM32、HAL库的TDA7719TR音频接口芯片驱动程序设计
  • 基于Win在VSCode部署运行OpenVINO模型
  • MySQL 8.0 OCP 1Z0-908 题目解析(2)
  • 基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计
  • Windows部署LatentSync唇形同步(字节跳动北京交通大学联合开源)
  • 仓颉Magic亮相GOSIM AI Paris 2025:掀起开源AI框架新热潮
  • 初始“协议”
  • golang 定时器
  • 软件测试——面试八股文(入门篇)
  • React vs Vue:点击外部事件处理的对比与实现
  • 深入理解 TypeScript 的 Partial<T> 类型
  • 菜狗的脚步学习
  • [SAP] 通过程序名获取事务码TCode
  • Scala和Go差异
  • c++STL-通用(反向)迭代器适配器
  • 算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 第十六章 常用存储器介绍
  • 手机相册的 “智能分类” 功能
  • 数学复习笔记 7
  • Playwright 安装配置文件详解
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 外媒:初步结果显示,菲律宾前总统杜特尔特当选达沃市市长
  • 明查|印度空军“又有一架战机被巴基斯坦击落,飞行员被俘”?
  • 印控克什米尔地区再次传出爆炸声
  • 跨越时空的“精神返乡”,叶灵凤藏书票捐赠上海文学馆
  • 婚姻登记“全国通办”首日,上海虹口登记中心迎来“甜蜜高峰”