基于Opencv中的DNN模块实现图像/视频的风格迁移

一、DNN模块的介绍

1、简介

OpenCV中的DNN(Deep Neural Network)模块是一个功能强大的组件,它支持深度学习网络模型的加载和推理。虽然DNN模块不提供模型的训练功能,但它可以与主流的深度学习框架(如TensorFlow、Caffe、Torch和Darknet)兼容,加载这些框架训练好的模型进行推理。

2、特点

(1)、轻量型 :DNN模块仅提供推理功能,因此代码量较小,运行开销也较小。

(2)、使用方便 :如果项目中已经使用OpenCV,那么可以很容易地集成DNN模块,为项目添加深度学习能力。

(3)、通用性:支持多种网络模型格式,无需进行额外的模型转换。

二、DNN模块的用法

(1)、图像预处理功能函数cv2.dnn.blobFromImage

复制代码
实现图像预处理,从原始图像构建一个符合人工神经网络输入格式的四维块。

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,
swapRB :表示在必要时交换通道的R通道和B通道。一般情况下使用的是RGB通道。而OpenCV通常采用的是BGR通道。因此可以根据需要交换第1个和第3个通道。该值默认为 False。
crop :布尔值,如果为 True,则在调整大小后进行居中裁剪。

返回值:blob: 表示在经过缩放、裁剪、减均值后得到的符合人工神经网络输入的数据。该数据是一个四维数据,

布局通常使用N(表示batch size)、C(图像通道数,如RGB图像具有三个通道)、H(图像高度)、W(图像宽度)

(2)、模型加载方法

加载模型net=cv2.dnn.readNet( model[, config[, framework]] )
各参数的含义如下:
model :模型权重参数文件路径。文件内存储的是训练好的模型的权重值,是二进制文件。
config :模型配置文件路径。模型配置文件内存储的模型描述文件,描述的是网络结构,是文本文件,文件较小。
framework :DNN框架,可省略,DNN模块会自动推断框架种类。
net:返回值,返回网络模型对象。

三、DNN模块的实践,实现图像的风格迁移

代码

python 复制代码
import cv2

image = cv2.imread('image/cat.jpg')
cv2.imshow('cat', image)
cv2.waitKey(0)

# 获取图片尺寸
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(image, 1, (w, h), (0, 0, 0), swapRB=True, crop=False)

# 几种模型
# net = cv2.dnn.readNet(r'model/candy.t7')
# net = cv2.dnn.readNet(r'model/composition_vii.t7')
# net = cv2.dnn.readNet(r'model/feathers.t7')
net = cv2.dnn.readNet(r'model/la_muse.t7')
# net = cv2.dnn.readNet(r'model/mosaic.t7')
# net = cv2.dnn.readNet(r'model/the_wave.t7')
# net = cv2.dnn.readNet(r'model/starry_night.t7')
# net = cv2.dnn.readNet(r'model/udnie.t7')

net.setInput(blob)
out = net.forward()
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('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果展示

相关推荐
龙山云仓14 分钟前
小G&老D求解:第7日·立夏·蝼蝈鸣
人工智能·机器学习
LaughingZhu25 分钟前
Product Hunt 每日热榜 | 2026-04-30
人工智能·经验分享·深度学习·神经网络·产品运营
sunneo31 分钟前
专栏D-团队与组织-03-产品文化
人工智能·产品运营·aigc·产品经理·ai编程
Muyuan199831 分钟前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
小呆呆66644 分钟前
Codex 穷鬼大救星
前端·人工智能·后端
薛定猫AI1 小时前
【深度解析】Kimi K2.6 的长上下文 Agentic Coding 能力与 OpenAI 兼容 API 接入实践
人工智能·自动化·知识图谱
星爷AG I1 小时前
20-6 记忆整合(AGI基础理论)
人工智能·agi
AI创界者1 小时前
人工智能 GPT-Image DMXAPI Python AI绘画
人工智能
播播资源1 小时前
GPT-5.5 模型功能深度解析:从模型介绍、核心特点到应用场景全景分析 如何快速接入使用
人工智能·gpt
谁似人间西林客1 小时前
工厂大脑是什么?从经验驱动到AI辅助的决策跃迁
人工智能