EmguCV学习笔记 VB.Net 11.7 风格迁移

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

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 风格迁移后的图像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值