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

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

项目需求


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


  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

相关文章
|
21天前
|
机器学习/深度学习 开发工具 计算机视觉
视觉智能平台常见问题之平台的换脸或者换人物到对应的某个图片里面去如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
21天前
|
机器学习/深度学习 编解码 算法
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
宣传技能培训2——《图片后期处理与制作》光影魔术师:一小时速成Lightroom图片后期软件 + 案例分析
96 0
|
12月前
|
数据安全/隐私保护
谈一谈|文档加水印的常见做法
谈一谈|文档加水印的常见做法
90 1
|
Java 计算机视觉
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏04图像资源的透明处理
102 0
|
Java
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
手把手一步一步教你使用Java开发一个大型街机动作闯关类游戏02支持中文及显示FPS
120 0
|
IDE 编译器 开发工具
|
存储 编解码 算法
带你读《多媒体技术教程(原书第2版)》之三:图形和图像的数据表现
本书内容取自课堂上讲述的实际素材,适合作为计算机科学和工程专业学生的教材。从多媒体数据表现、多媒体数据压缩、多媒体通信和联网、多媒体信息分享和检索四个层面对多媒体涉及的基本概念、基本原理和基本技术进行了详细介绍。作者用一种实用的方式来讲述基本概念,使学生能够运用享有的技术来解决现实多媒体世界中的问题。
|
存储 PHP
业界对生成图片缩略图的做法归纳
网站如果有很多用户上传图片(相册,商品图片),一般的做法是将用户图片保存在磁盘上面(数据库中记录图片的地址)。用户上传的时候按照原图、中图、小图等各个尺寸都生成一份保存在磁盘上。比如php的网店系统echsop就是这么做的,而shopex之类也大同小异。
1500 0
PancakeBot ,把薄饼做成任何你想要的样子 | 酷玩精选
也许你已经厌倦了传统的薄饼的单一样式,那是时候做出改变了,正巧 PancakeBot 可以帮你改变这一切。
135 0
PancakeBot ,把薄饼做成任何你想要的样子 | 酷玩精选
文字处理技术:搞明白了表格是如何参与文字方向的
文字处理技术:搞明白了表格是如何参与文字方向的
88 0

热门文章

最新文章