Matlab代码转C++(二) —— mwArray


本文主要介绍:matlab与C++结合的数据类型mwArray的一些基本知识,以及在C++中,如何对mwArray赋值,主要包括矩阵赋值和字符串赋值。

首先,说明mwArray数据类型不同于mxArray,所以许多关于mxArray的用法,对mwArray不一定适用,具体区别见博文:

http://www.cnblogs.com/kmliang/archive/2012/08/29/2662943.html

一.矩阵赋值

<1>mwArray 定义矩阵变量

  mwArray  A(rows, cols, type)

参数说明:

   A       : 变量名

   rows:行数

   col   :列数

   type :数t据类型

type类型有:

  1. typedef enum  
  2. {  
  3.     mxUNKNOWN_CLASS = 0, //未知类型  
  4.     mxCELL_CLASS, //细胞类型  
  5.     mxSTRUCT_CLASS, //结构类型  
  6.     mxLOGICAL_CLASS, //布尔类型  
  7.     mxCHAR_CLASS,  //字符串类型  
  8.     mxVOID_CLASS,  //void类型  
  9.     mxDOUBLE_CLASS,   
  10.     mxSINGLE_CLASS, //单精度浮点数  
  11.     mxINT8_CLASS, //  
  12.     mxUINT8_CLASS,  
  13.     mxINT16_CLASS,  
  14.     mxUINT16_CLASS,  
  15.     mxINT32_CLASS,  
  16.     mxUINT32_CLASS,  
  17.     mxINT64_CLASS,  
  18.     mxUINT64_CLASS,  
  19.     mxFUNCTION_CLASS, //函数类型  
  20.     mxOPAQUE_CLASS, //  
  21.     mxOBJECT_CLASS  //对象类型  
  22. }  
typedef enum
{
    mxUNKNOWN_CLASS = 0, //未知类型
    mxCELL_CLASS, //细胞类型
    mxSTRUCT_CLASS, //结构类型
    mxLOGICAL_CLASS, //布尔类型
    mxCHAR_CLASS,  //字符串类型
    mxVOID_CLASS,  //void类型
    mxDOUBLE_CLASS, 
    mxSINGLE_CLASS, //单精度浮点数
    mxINT8_CLASS, //
    mxUINT8_CLASS,
    mxINT16_CLASS,
    mxUINT16_CLASS,
    mxINT32_CLASS,
    mxUINT32_CLASS,
    mxINT64_CLASS,
    mxUINT64_CLASS,
    mxFUNCTION_CLASS, //函数类型
    mxOPAQUE_CLASS, //
    mxOBJECT_CLASS  //对象类型
}

整体含义是:定义矩阵A,行数为:rows,列数为:cols,类型为:type

注: 如果参数不是矩阵,只是一个数,令 rows=1,cols=1即可。

<2>矩阵赋初值:

  1. int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(2,3,mxINT32_CLASS);    
  3. A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols  
int a[6] = {1,2,3,4,5,6}
mwArray A(2,3,mxINT32_CLASS);  
A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols

注:该过程相当于把1*6的矩阵,转化为2*3的矩阵,matlab转化顺序是,先排第一列,由上到下为a[0] a[1],然后排第二列,由上到下为a[2] a[3],即转化后的A为:

1     3      5

2     4      6

如果要使A为:

1      2     3

4      5     6

需这样赋值:

  1. <pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}  
  2. mwArray A(3,2,mxINT32_CLASS);  //修改此处:行列数互换  
  3. A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols  
<pre name="code" class="cpp">int a[6] = {1,2,3,4,5,6}
mwArray A(3,2,mxINT32_CLASS);  //修改此处:行列数互换
A.SetData(a,6); //第二个参数为要设置的数的个数,大小可设为rows*cols


 此时生成的A为: 
 

1      4

2      5

3      6

该矩阵转置之后,既可以达到所需形式,转置过程可以在matlab的.m文件中添加,先修改.m,然后在生成dll、lib、h文件。

尤其是,在图像处理时,如果传递的矩阵为图像数据矩阵,要采用后一种方法赋值,否则,图像会严重变形失真。二、字符串赋值

  1. char str[5] = "abcd";  
  2. //或 CString str = "abcd"  
  3. mwArray mwA(str);  
char str[5] = "abcd";
//或 CString str = "abcd"
mwArray mwA(str);

该过程比较简单。



Stable Diffusion是一款基于深度学习的文本到像模型,能够根据输入的文字提示生成相应的图片。为了帮助您了解如何使用Stable Diffusion批量生成图片的过程,下面将为您详细介绍。 ### 环境准备 首先你需要准备好适合运行Stable Diffusion的工作环境: 1. **硬件设备**:建议配备一块NVIDIA GPU,显存越大越好;如果没有GPU也可以只依靠CPU工作,不过效率会非常低。 2. **安装Python环境**:通常选择Anaconda来管理虚拟环境可以简化依赖包之间的冲突问题。 3. **获取Stable Diffusion WebUI项目源码**: - 可以从GitHub上克隆官方仓库`https://github.com/AUTOMATIC1111/stable-diffusion-webui.git` 4. 安装必要的依赖库并启动Web UI界面: ```bash git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git cd stable-diffusion-webui conda env create -f environment.yaml # 或者使用 pip install 脚本里的命令去创建pip环境 ``` 5. 根据系统情况调整配置文件中的设置(例如CUDA版本等) ### 批量生成功能实现步骤 接下来就是具体的批处理流程了: 1. 进入StableDiffusion web ui页面后,在左侧找到“Batch Generate”选项卡; 2. 设置好每次迭代的数量、随机种子值范围以及总的迭代次数等等参数; 3. 输入想要转换成画内容描述语句作为Prompt,并设定Negative Prompt避免某些特征出现在最终结果里; 4. 修改其他如风格倾向(Style)、CFG Scale、采样步数(Sampling Steps)等相关超参直至满意为止; 5. 开始点击"Generate"按钮就可以让程序自动为你生成一系列高质量的艺术作品啦! 需要注意的是由于这是一个比较消耗资源的任务,所以在长时间稳定输出之前最好先做一些小规模测试熟悉整个过程并且观察效果是否达到预期标准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值