版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。
EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。
教程VB.net版本请访问:EmguCV学习笔记 VB.Net 目录-CSDN博客
教程C#版本请访问:EmguCV学习笔记 C# 目录-CSDN博客
笔者的博客网址:https://blog.csdn.net/uruseibest
教程配套文件及相关说明以及如何获得pdf教程和代码,请移步:EmguCV学习笔记
学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客
学习C#知识,请移步:C# 教程 目录_c#教程目录-CSDN博客
11.7 风格迁移
斯坦福大学李飞飞团队的风格迁移模型是一种基于深度学习的图像处理技术,可以将一张图像的风格转移到另一张图像上。该模型最初由Gatys等人提出,后来被李飞飞团队进一步优化和改进。该模型在图像处理领域具有广泛的应用,例如艺术风格转换、视频风格迁移等。
【代码位置:frmChapter11】Button7_Click
'风格序号
Dim styleindex As Integer = 0
'风格迁移
Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
'需要测试的图像文件
Dim m As New Mat("C:\learnEmgucv\tower.jpg", ImreadModes.Color)
Dim hm As Single = m.Height
Dim wm As Single = m.Width
'10种风格迁移
Dim styles(9) As String
styles(0) = "C:\learnEmgucv\styletransfer\eccv16\starry_night.t7"
styles(1) = "C:\learnEmgucv\styletransfer\eccv16\composition_vii.t7"
styles(2) = "C:\learnEmgucv\styletransfer\eccv16\la_muse.t7"
styles(3) = "C:\learnEmgucv\styletransfer\eccv16\the_wave.t7"
styles(4) = "C:\learnEmgucv\styletransfer\instance_norm\candy.t7"
styles(5) = "C:\learnEmgucv\styletransfer\instance_norm\feathers.t7"
styles(6) = "C:\learnEmgucv\styletransfer\instance_norm\la_muse.t7"
styles(7) = "C:\learnEmgucv\styletransfer\instance_norm\mosaic.t7"
styles(8) = "C:\learnEmgucv\styletransfer\instance_norm\the_scream.t7"
styles(9) = "C:\learnEmgucv\styletransfer\instance_norm\udnie.t7"
Dim net As Dnn.Net
net = DnnInvoke.ReadNet(styles(styleindex))
Dim blob As Mat
blob = DnnInvoke.BlobFromImage(m, 1.0, New Drawing.Size(wm, hm), New MCvScalar(0, 0, 0), False, False)
net.SetInput(blob)
Dim mout As New Mat
mout = net.Forward()
'返回一个四维数组
Dim fout(,,,) As Single
fout = mout.GetData()
'返回维度:
'第1维:图像数量,这里是1
'第2维:通道数量 '3
'第3维:高度 '
'第4维:宽度 '
'在实际中需要将第2维、第3维、第4维提取出来组成一个图像
Dim channels As Integer = fout.GetLength(1)
Dim height As Integer = fout.GetLength(2)
Dim width As Integer = fout.GetLength(3)
Dim vm As New VectorOfMat
For i As Integer = 0 To channels - 1
'取出每个通道
Dim matr As New Matrix(Of Integer)(New Size(width, height))
For j As Integer = 0 To height - 1
For k As Integer = 0 To width - 1
matr(j, k) = CInt(fout(0, i, j, k))
Next
Next
'将每个通道图像加入到VectorOfMat,总共3个通道
vm.Push(matr.Mat)
Next
Dim outputmat As New Mat
'合并通道
CvInvoke.Merge(vm, outputmat)
ImageBox1.Image = outputmat
If styleindex = 9 Then styleindex = 0 Else styleindex += 1
End Sub
输出结果如下图所示:
图11-6 风格迁移后的图像