python+opencv神经网络风格迁移–你也可以拥有梵高一样的画作

梵高画作

什么是神经网络的风格迁移,简单来件就是输入1张照片(自己的照片),输出具备另外一张照片(例子梵高画作)风格的图片,同时保留原本自己图片的元素,如下图片表明了神经网络风格迁移的过程,当然你也可以使用自己的神经网络训练自己的模型,本期教程利用了已经训练好的模型来进行神经网络的风格迁移

图片神经网络迁移

导入第三方库(1-4行)

加载神经网络(6行)

加载图片获取图片的尺寸(7-12行,这些代码在我们分享目标检测时都有遇到)

计算图片blob值(15-16行)

放入神经网络,进行神经网络的前向传递以便输出风格迁移图片(17-18行)

本例的特定图像,则 输出 NumPy的阵列将具有形状 (1 ,3 ,452 ,600 ) :

· 输出图像中有 3个通道。

· 输出形状中的最后两个值是行数(高度)和列数(宽度)。

我们将矩阵重塑为 (3 ,H ,W ) (第21行

然后通过以下方式对图像进行”反处理”:

1. 再加上先前减去的平均值(第22-24行)。

2. 缩放(第25行)。

3. 将图片矩阵转置(第26行

4. 显示图片

通过以上便可以很容易的把自己的图片拥有很多名人画家的风格画作,但是要想训练自己的模型,需要写神经网络来训练,这个后期分享,当然你也可以使用前期分享过的视频目标检测教程,来优化本期代码来进行视频的风格迁移

视频神经 网络迁移

前期文章我们分享目标检测算法的时候都是分开图片检测与视频检测,当然,当我们输入一段视频或者打开摄像头时,也可以同样适用

导入第三方库(1-7行)

由于我们训练了很多风格的模型,可以导入所有的模型,使用itertools工具来循环加载模型,方便后期调用(10-15行)

加载模型(18行)

初始化视频流加载图片,并进行图片尺寸调整(21-30行)

计算图片blob值(32-33行)

导入神经网络,进行神经网络的风格迁移(34-35行)

处理神经网络处理的照片(36-41行)

若我们点击n,就让神经网络加载下一个模型(47-50)

最后把风格迁移完成的图片以视频的形式实时显示

OK,大家猜猜本期都使用了那个画家的那个画作