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

打印 上一主题 下一主题

主题 655|帖子 655|积分 1965

一、DNN模块的介绍

1、简介

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

(1)、轻量型:DNN模块仅提供推理功能,因此代码量较小,运行开销也较小。
(2)、使用方便:如果项目中已经使用OpenCV,那么可以很轻易地集成DNN模块,为项目添加深度学习本领。
(3)、通用性:支持多种网络模子格式,无需举行额外的模子转换。
二、DNN模块的用法

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

  1. 实现图像预处理,从原始图像构建一个符合人工神经网络输入格式的四维块。
复制代码
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:模子配置文件路径。模子配置文件内存储的模子形貌文件,形貌的是网络布局,是文本文件,文件较小。
frameworkNN框架,可省略,DNN模块会主动推断框架种类。
net:返回值,返回网络模子对象。 

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

代码

  1. import cv2
  2. image = cv2.imread('image/cat.jpg')
  3. cv2.imshow('cat', image)
  4. cv2.waitKey(0)
  5. # 获取图片尺寸
  6. (h, w) = image.shape[:2]
  7. blob = cv2.dnn.blobFromImage(image, 1, (w, h), (0, 0, 0), swapRB=True, crop=False)
  8. # 几种模型
  9. # net = cv2.dnn.readNet(r'model/candy.t7')
  10. # net = cv2.dnn.readNet(r'model/composition_vii.t7')
  11. # net = cv2.dnn.readNet(r'model/feathers.t7')
  12. net = cv2.dnn.readNet(r'model/la_muse.t7')
  13. # net = cv2.dnn.readNet(r'model/mosaic.t7')
  14. # net = cv2.dnn.readNet(r'model/the_wave.t7')
  15. # net = cv2.dnn.readNet(r'model/starry_night.t7')
  16. # net = cv2.dnn.readNet(r'model/udnie.t7')
  17. net.setInput(blob)
  18. out = net.forward()
  19. out_new = out.reshape(out.shape[1], out.shape[2], out.shape[3])
  20. cv2.normalize(out_new, out_new, norm_type=cv2.NORM_MINMAX)
  21. result = out_new.transpose(1, 2, 0)
  22. cv2.imshow('result', result)
  23. cv2.waitKey(0)
  24. cv2.destroyAllWindows()
复制代码
结果展示

 


 
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

没腿的鸟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表