sprintf

用opencv给彦女王生成一副蒙太奇画像

回眸只為那壹抹淺笑 提交于 2020-08-11 14:49:24
前言 大家好呀,前两天烈阳天道1上映了,不知道大家看没看呢,里面还有一小段彦穿越虫洞与猴哥相遇的画面,彦女王啊啊啊~~ 所以我去网上爬了二百来张我大学的风景画,然后找了以前存的彦女王的图片,生成了一幅蒙太奇画像。然后我两个热爱的就合体啦! 先看一下什么是蒙太奇图像吧,其实你肯定见过,只不过不知道叫蒙太奇而已: 一张大的图片,是由很多小的图片拼接而成的这种,就是蒙太奇图像啦(或者叫马赛克拼图),我要做的就是把我大学的风景图拼成彦的图片。 综述实现思路 文末附有python代码,本文为我写的C++代码 1:读取文件夹内的风景图片集,将每张剪裁到90*45大小并存入Mat容器内 2:将图片模板(彦的照片)扩大为1600*2700大小 3:计算图片集的直方图并将结果存到MatND容器内(直方图容器) 4:双重for循环以90*45的步长遍历图片模板计算各个区域的直方图,并将区域直方图与图片集的直方图进行比对,得到相似度最高的风景图片,将该风景图片替换模板对应区域 5:将4步得到的蒙太奇图与原模板图线性相加,得到更为逼真的效果 是不是很简单的过程?但就这么个过程,我调了一天的bug,然后被迫深入理解了C++的动态回收机制… … 建议感兴趣的小伙伴自己实现一下。 以下代码在主函数内顺次复制粘贴即可 1:读取图片集并预处理 //【1】图片集的采集与处理 int Images_number =

go-chart 发送图文的统计报表邮件

99封情书 提交于 2020-08-11 14:08:40
原文: https://blog.csdn.net/zangdaiyang1991/article/details/105200062 ---------------------------------------------------------------- 需求 邮件中实现统计信息的发送。统计信息以折线图、饼图、柱状图的形式展示。因为邮件中无法支持js解析,所以采用go-chart生成PNG图片后base64编码后发送。 <img src="data:image/png;base64,xxx"> 1 go-chart实战 go-chart是个强大的go生成图片的库,但是采用默认配置生成线条较多或者文本过长的图片时,无法完美适应。默认不支持中文。但是里面的属性大多可自己定义,整体来说非常强大。 代码 package charter import ( "bytes" "encoding/base64" "fmt" "math/rand" "os" "time" "github.com/wcharczuk/go-chart" "github.com/wcharczuk/go-chart/drawing" ) const ( lineChartXAxisName = "Date" lineChartYAxisName = "Count" lineChartHeight = 700

C/C++ 程序中调用命令行命令并获取命令行输出结果

狂风中的少年 提交于 2020-08-11 12:33:31
在 c/c++ 程序中,可以使用 system()函数运行命令行命令,但是只能得到该命令行的 int 型返回值,并不能获得显示结果。例如system(“ls”)只能得到0或非0,如果要获得ls的执行结果,则要通过管道来完成的。首先用popen打开一个命令行的管道,然后通过fgets获得该管道传输的内容,也就是命令行运行的结果。 在linux上运行的例子如下: void executeCMD( const char *cmd, char * result) { char buf_ps[ 1024 ]; char ps[ 1024 ]={ 0 }; FILE * ptr; strcpy(ps, cmd); if ((ptr=popen(ps, " r " ))!= NULL) { while (fgets(buf_ps, 1024 , ptr)!= NULL) { strcat(result, buf_ps); if (strlen(result)> 1024 ) break ; } pclose(ptr); ptr = NULL; } else { printf( " popen %s error\n " , ps); } } 在这段代码中,参数cmd为要执行的命令行,result为命令行运行结果。输入的cmd命令最好用... 2>&1 的形式,这样将标准错误也读进来。

微信公众平台开发(十) 消息回复总结

﹥>﹥吖頭↗ 提交于 2020-08-11 11:01:41
一、简介 微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。 二、思路分析 对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响应(现支持回复文本、图文、语音、视频、音乐)。 三、文本回复 3.1 文本回复xml 结构 < xml > < ToUserName > <![CDATA[ toUser ]]> </ ToUserName > < FromUserName > <![CDATA[ fromUser ]]> </ FromUserName > < CreateTime > 12345678 </ CreateTime > < MsgType > <![CDATA[ text ]]> </ MsgType > < Content > <![CDATA[ content ]]> </ Content > </ xml > 3.2 结构说明 3.3 具体实施 针对上面给出的xml 结构,我们只需要在对应的位置填上内容,然后格式化输出就可以了。 说明: ToUserName 位置上填写的是$fromUsername = $postObj->FromUserName,就是把消息返回给发送信息过来的用户,即接收方账号。 FromUserName

PHP实现Redis单据锁以及防止并发重复写入

蹲街弑〆低调 提交于 2020-08-11 05:11:37
一、前言: 在整个供应链系统中,会有很多种单据(采购单、入库单、到货单、运单等等),在涉及写单据数据的接口时(增删改操作),即使前端做了相关限制,还是有可能因为网络或异常操作产生并发重复调用的情况,导致对相同单据做相同的处理; 为了防止这种情况对系统造成异常影响,我们通过Redis实现了一个简单的单据锁,每个请求需先获取锁才能执行业务逻辑,执行结束后才会释放锁;保证了同一单据的并发重复操作请求只有一个请求可以获取到锁(依赖Redis的单线程),是一种悲观锁的设计; 注:Redis锁在我们的系统中一般只用于解决并发重复请求的情况,对于非并发的的重复请求一般会去数据库或日志校验数据的状态,两种机制结合起来才能保证整个链路的可靠。 二、加锁机制: 主要依赖Redis setnx指令实现: 但使用setnx有一个问题,即setnx指令不支持设置过期时间,需要使用expire指令另行为key设置超时时间,这样整个加锁操作就不是一个原子性操作,有可能存在setnx加锁成功,但因程序异常退出导致未成功设置超时时间,在不及时解锁的情况下,有可能会导致死锁(即使业务场景中不会出现死锁,无用的key一直常驻内存也不是很好的设计); 这种情况可以使用Redis事务解决,把setnx与expire两条指令作为一个原子性操作执行,但这样做相对而言会比较麻烦,好在Redis 2.6.12之后版本,Redis

golang 对结构体进行格式化输出

左心房为你撑大大i 提交于 2020-08-11 05:03:24
package main import ( "bytes" "encoding/json" "fmt" ) type RedisConfig struct { IP string PORT string AUTH int PASS string } type DbConfig struct { Host string Port int Uid string Pwd string DbName string } //Config 游戏服务器的配置 type Config struct { ServerId int Port int //端口号 Redis *RedisConfig `json:"redis" bson:"redis"` DbConfigs map[string]*DbConfig //如果配置多个数据库源,则用逗号分隔源的名字 callbacks []func() } func (conf *Config) String() string { b, err := json.Marshal(*conf) if err != nil { return fmt.Sprintf("%+v", *conf) } var out bytes.Buffer err = json.Indent(&out, b, "", " ") if err != nil { return fmt

PHP底层运行机制与原理

风格不统一 提交于 2020-08-11 01:20:37
PHP的设计理念及特点 多进程模型:由于PHP是多进程模型,不同请求间互不干涉,这样保证了一个请求挂掉不会对全盘服务造成影响,当然,时代发展,PHP也早已支持多线程模型。 弱类型语言:和C/C++、Java、C#等语言不同,PHP是一门弱类型语言。一个变量的类型并不是一开始就确定不变,运行中才会确定并可能发生隐式或显式的类型转换,这种机制的灵活性在web开发中非常方便、高效。 引擎(Zend)+组件(ext)的模式,降低内部耦合。 中间层(sapi),隔绝web server和PHP。 语法简单灵活,没有太多规范。 PHP的核心架构 PHP核心架构如下图,从下到上可以简单分为四层体系: Zend引擎:纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。 Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(如array 系列)、标准库等都是通过extension来实现。 Sapi :全称是Server Application Programming Interface服务端应用编程接口

聊聊kingbus的binlog_server_handler.go

↘锁芯ラ 提交于 2020-08-11 01:17:33
序 本文主要研究一下kingbus的binlog_server_handler.go StartBinlogServer kingbus/api/binlog_server_handler.go //StartBinlogServer implements start a binlog server func (h *BinlogServerHandler) StartBinlogServer(echoCtx echo.Context) error { h.l.Lock() defer h.l.Unlock() var args config.BinlogServerConfig var err error defer func() { if err != nil { log.Log.Errorf("StartBinlogServer error,err: %s", err) echoCtx.JSON(http.StatusInternalServerError, utils.NewResp().SetError(err.Error())) } }() err = echoCtx.Bind(&args) if err != nil { return err } kingbusIP := h.svr.GetIP() //check args err = args.Check

C++ 从基本数据类型说起

坚强是说给别人听的谎言 提交于 2020-08-10 13:30:36
前言 int 在32位和64位操作系统,都是四个字节长度。为了能编写一个在32位和64位操作系统都能稳定运行的程序,建议采用std::int32_t 或者std::int64_t指定数据类型。*与long随操作系统子长变化而变化外,其他的都固定不变(32位和64位相比) 整型溢出和浮点型的范围。 float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。精度 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。 测试代码 double dTestData = +1.79E+308; char szDouleArray[128] = { 0 }; sprintf(szDouleArray, "%f", dTestData); int nDoubleArrayLen =

MATLAB实例:多元函数拟合(线性与非线性)

China☆狼群 提交于 2020-08-10 00:43:41
MATLAB实例:多元函数拟合(线性与非线性) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请看: 随笔分类 - MATLAB作图 之前写过一篇博文,是 关于一元非线性曲线拟合,自定义曲线函数 。 现在用 最小二乘法 拟合多元函数,实现线性拟合与非线性拟合,其中非线性拟合要求自定义拟合函数。 下面给出三种拟合方式,第一种是多元线性拟合(回归),第二三种是多元非线性拟合,实际中第二三种方法是一个意思,任选一种即可,推荐第二种拟合方法。 1. MATLAB程序 fit_nonlinear_data.m function [beta, r]=fit_nonlinear_data(X, Y, choose) % Input: X 自变量数据(N, D), Y 因变量(N, 1),choose 1-regress, 2-nlinfit 3-lsqcurvefit if choose==1 X1=[ones(length(X(:, 1)), 1), X]; [beta, bint, r, rint, states]=regress(Y, X1) % 多元线性回归 % y=beta(1)+beta(2)*x1+beta(3)*x2+beta(4)*x3+... % beta—系数估计 % bint—系数估计的上下置信界 % r—残差 %