你想要一份“搞怪”型画风的照片么?看这里,风格迁移帮你搞定!

简介: 你想要一份“搞怪”型画风的照片么?看这里,风格迁移帮你搞定!

项目需求


  趁着双休,有属于自己的时间了,赶紧给自己做几张“搞怪”画风照片(本文后面会附上照片),现在需求如下:


  1. 输入自己的照片;


  1. 通过某种手段可以获得到比较搞怪画风的照片;


  1. 这种手段具备一定的泛化能力。


注意事项: 本文着重于实践操作,不过讲解源理,望见晾!



需求分析


  上述需求不禁让我想起了初学GAN时候的风格迁移网络,该类型的网络可以正好满足上述需求,于是自己在网上搜刮下来了一些训练好的权重给自己使用。(双休在家,无GPU训练)



  实践步骤逻辑:


  1. CV读取图像;


  1. 读取网络Net;


  1. 调整图像的尺寸和格式;


  1. 计算网络对原图像处理的结果;


  1. 输出结果的尺寸和通道数;


  1. 将输出结果存放到图像中去;


  1. 获取原图像的通道数及均值;


  1. 恢复图像剔除掉的均值;


  1. 对输出图像进行归一化;


  1. 显示结果搞怪图




实践调试


  在电脑里面找到了自己以前做人脸检测的样图,现在正好可以拿来使用以下: 在centos7中运行如下代码,创建CMakeLists.txt 进行cmake和make即可获取下面的图像。


#include <opencv2/opencv.hpp>
#include <iostream>
#include<vector>
#include<string>
using namespace cv;
using namespace cv::dnn;
using namespace std;
int main()
{
  Mat image = imread("/home/kiven/Demo/Imgs/lena.png");
  String models[5] = { "Net1.t7","Net2.t7","Net3.t7","Net4.t7","Net5.t7" };
  for (int i = 0; i < 5; i++)
  {
    Net net = readNet(models[i]);
    Scalar imgaeMean = mean(image);
    Mat blobImage = blobFromImage(image, 1.0, Size(256, 256), imgaeMean, false, false);
    net.setInput(blobImage);
    Mat output = net.forward();
    int outputChannels = output.size[1];
    int outputRows = output.size[2];
    int outputCols = output.size[3];
    Mat result = Mat::zeros(Size(outputCols, outputRows), CV_32FC3);
    float* data = output.ptr<float>();
    for (int channel = 0; channel < outputChannels; channel++)
    {
      for (int row = 0; row < outputRows; row++)
      {
        for (int col = 0; col < outputCols; col++)
        {
          result.at<Vec3f>(row, col)[channel] = *data++;
        }
      }
    }
    result = result + imgaeMean;
    result = result / 255.0;
    resize(result, result, image.size());
    //显示结果
    string OutImgName = format("/home/kiven/Demo/SaveImgs/%d.jpg", i); 
    imwrite(OutImgName, result);
  }
  return 0;
}
复制代码


image.png

相关文章
|
3月前
Midjourney-04 收集Prompt 百变小樱魔法卡 ClearCard 透明牌 提示词实践 Niji 5 Niji6 V6 详细记录 多种风格 附带文本关键词
Midjourney-04 收集Prompt 百变小樱魔法卡 ClearCard 透明牌 提示词实践 Niji 5 Niji6 V6 详细记录 多种风格 附带文本关键词
27 0
|
5月前
PPT 稳妥选用字体
PPT 稳妥选用字体
23 0
|
7月前
|
Linux iOS开发 MacOS
【随手记】maplotlib.use函数设置图像的呈现方式
【随手记】maplotlib.use函数设置图像的呈现方式
68 0
|
8月前
|
机器学习/深度学习 编解码 算法
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
139 0
|
机器学习/深度学习 数据采集 PyTorch
图片风格自动分析模型
图片风格自动分析模型
264 0
|
数据安全/隐私保护
谈一谈|文档加水印的常见做法
谈一谈|文档加水印的常见做法
132 1
|
IDE 编译器 开发工具
|
存储 编解码 算法
带你读《多媒体技术教程(原书第2版)》之三:图形和图像的数据表现
本书内容取自课堂上讲述的实际素材,适合作为计算机科学和工程专业学生的教材。从多媒体数据表现、多媒体数据压缩、多媒体通信和联网、多媒体信息分享和检索四个层面对多媒体涉及的基本概念、基本原理和基本技术进行了详细介绍。作者用一种实用的方式来讲述基本概念,使学生能够运用享有的技术来解决现实多媒体世界中的问题。
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
92 0
工作中需要牢记的基础知识点:直接在word粘贴的自己的笔记,后期转为文字细化
|
存储 前端开发 iOS开发
「号外」如何在PPT和Keynote演示中作出选择
「号外」如何在PPT和Keynote演示中作出选择
354 0
「号外」如何在PPT和Keynote演示中作出选择