随笔分类 - C++学习
摘要:C++本身只支持 xml、yml 的数据文件读写功能,并且其xml文件与构建网页数据所用的xml文件格式不一致,在Matlab中无法读取。我们可以通过以下方式将数据保存为txt文件,再导入到Matlab中。1.C++保存Mat矩阵 Mat_<float> sal = saliency.saliency( im );ofstream fout;fout.open("sal_value.txt");fout<<sal.rows<<endl;fout<<sal.cols<<endl;for(int i=0;i<sa
阅读全文
摘要:目的¶从真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。比如上面的图像,在标出的镜子区域中你见到的只是一个矩阵,该矩阵包含了所有像素点的强度值。如何获取并存储这些像素值由我们的需求而定,最终在计算机世界里所有图像都可以简化为数值矩以及矩阵信息。作为一个计算机视觉库, OpenCV 其主要目的就是通过处理和操作这些信息,来获取更高级的信息。因此,OpenCV如何存储并操作图像是你首先要学习的。Mat¶在2001年刚刚出现的时候,OpenCV基于 C
阅读全文
摘要:1.要生成C++动态链接库,在matlab命令窗口中输入:>> mcc -W cpplib:ColorHarris -T link:lib ColorHarris -d F:\zhangying\xieyulin\cfile\结果出现:Depfun error: 'Unable to locate ColorHarris as a function on the MATLAB path'原因:当前编译路径没有修改,错误已经提示了,将当前matlab路径改到你这个m文件所在的路径下,(点击运行按钮会出现 change directory,选择即可)再进行编译!2.在V
阅读全文
摘要:在C++中,读入一幅图像使用语句如下,读入的图像像素为0-255之间的某一整数:Mat disp_image = imread(path,1);其中图像每个像素的RGB值是用3元素向量来存储(B,G,R)的,某一像素点的RGB值读取方式如下:Vec3b& mp = disp_image.at<Vec3b>(j, i); //C++用向量存储像素值double B = mp.val[0]; double G = mp.val[1];double R = mp.val[2];在matlab中,读入一幅图像并转换为double型使用语句如下,读入的图像像素在0-1之...
阅读全文
摘要:openCv学习笔记(二)—cv::Mat学习由于在写上一篇图像的数据结构时,发现自己只知道CvMat,竟然还有Mat数据结构,真是无知了,看了这么多程序,貌似没有看到这个结构。有可能那些程序都是些老版本的例子,这是在2.0以后加上的,所以我也得紧跟呀!以下是自己的学习心得。。。。一、Mat简介 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建。为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材料。但这种方法必须接受C语言所有的不足,这其中最大的不足要数手动内存管理,其依据是用户要为开辟和销毁内存负责。
阅读全文
摘要:配置环境:系统Windows XP,32位。MATLAB 2011b(安装路径:D:/Program Files/MATLAB/R2011b)VS2010英文版(安装路径:D:/Program Files/Microsoft Visual Studio 10.0)目的:采用由m文件构造动态链接库生成cpp文件,然后在visual studio中调用。1. MATLAB 环境配置:>> mbuild -setupWelcome to mbuild -setup. This utility will help you set up a default compiler. For a l
阅读全文
摘要:matlab版本为:matlab7.11.0(R2010b)vs20081.在matlab中生成dll在m文件中实现如下功能:获得N个魔方矩阵的秩。m文件的内容如下:function r = mrank(n)r = zeros(n,1);for k=1:n r(k) = rank(magic(k));end将上述内容保存为:mrank.m在matlab的command 窗口键入:>> mcc -B csharedlib:mrank mrank.m %该命令将在后面做说明在matlab7.0中执行上述命令后生成下面几个文件:mrank.exp mrank.exports mrank.
阅读全文
摘要:C++ STL Adaptor stack、queue和vector的使用1.Stacktop()返回栈顶元素,并不移除这个元素empty()如果栈空返回true,否则falsesize()栈的大小void push()插入元素到栈顶void pop()移除栈顶元素#include<iostream>#include<stack>using namespace std;void main(){stack<char> v;for(int i=0;i<10;i++)v.push(i+97);cout<<v.size()<<endl;
阅读全文
摘要:warning C4018: “<”: 有符号/无符号不匹配 出错代码 for(int j=0;j<detector.size();j++)出错原因分析: detector 是一个Vector容器 ,detecot.size() 在容器说明中 被定义为: unsigned int 类型, 而j是int 类型 所以会出现: 有符号/无符号不匹配 警告 错误改正 : 定义j为unsigned 类型后就可以了 即: for(unsigned int j=0;j<detector.size();j++)
阅读全文
摘要:单个的结构体类型变量在解决实际问题时作用不大,一般是以结构体类型数组的形式出现。结构体类型数组的定义形式为:struct stu / *定义学生结构体类型* /{char name[20]; / *学生姓名* /char sex; / *性别* /long num; / *学号* /float score[3]; / *三科考试成绩* /};struct stu stud[20]; 定/*义结构体类型数组stud ,*// *该数组有2 0个结构体类型元素* /其数组元素各成员的引用形式为:stud[0].name、stud[0].sex、stud[0].score[i];stud[1].na
阅读全文
摘要:C++/C学习笔记(十) ——存储分配器和适配器1.存储分配器STL容器元素的存储空间是动态分配和释放的,不同的硬件平台和操作系统对内存的管理方法和使用方法各不相同,STL为容器类定义了一个专门负责存储管理的类——allocator,但它仅针对内存管理。Allocator类是一个模版,作为容器类模版的一个policy参数,它不仅与将要为之分配空间的数据对象的类型无关,并且为动态内存的分配和释放提供了面向对象的接口。它是对new运算符的更高层次的抽象,即隐藏了底层的内存模式(段内存、共享内存、分布式内存等),封装了动态内存分配和释放操作,隐藏了指针本身的大小、存储空间重分配模型及内存页大小等细节
阅读全文
摘要:C++/C学习笔记(十) ——迭代器1.迭代器(1)迭代器的本质循环结构有两种控制方式:标志控制和计数控制。迭代器可以把这两种标志控制的循环统一为一种控制方法:迭代器控制,每一次迭代操作中对迭代器的修改就等价于修改标志或计数器。在STL中,容器的迭代器被作为容器元素对象或者I/O流中的对象的位置指示器,因此可以把它理解为面向对象的指针——一种泛型指针或通用指针,不依赖于元素的真实类型。迭代器的概念如图所示:set<int>::iteratoriter...
阅读全文
摘要:C++/C学习笔记(九) ——学习和使用STL1.STL简介STL(StandardTemplateLibrary)是C++标准库的最主要和最重要的组成部分。STL是一个标准规范,只是为容器、迭代器和泛型算法等组件定义了一整套统一的上层访问接口及各种组件搭配运用的一般规则,而没有定义组件底层的具体实现方法,因此不同的软件供应商都可以提供自己的STL实现版本,如Microsoft、Borland、HP、SGI等,虽然这些版本之间可能存在某些差异,但是概...
阅读全文
摘要:文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含
阅读全文
摘要:C++/C学习笔记(八) ——C++编译预处理1.文件包含(1)基本定义和方式#include伪指令用于包含一个头文件,头文件中存放的一般是模块接口,编译预处理器在扫描到该伪指令后就用对应的文本内容替换它。文件包含有两种语法形式:①#include<头文件名称> ——一般用来包含开发环境提供的库头文件,它指示编译预处理器在开发环境设定的搜索路径中查找所需的头文件。②#include"头文件名称" ——一般用来包含自己编写的头文件,它指示编译预处理器首先在当前工作目录下搜索头文件,如果找不到的话再到开发环境设定的路径中...
阅读全文
摘要:C++/C学习笔记(七)1.联合(union)联合也是一种构造数据类型,它提供了一种使不同成员之间共享存储空间的方法,同时可以实现不同类型数据成员之间的自动类型转换。但与结构不同的是,联合对象在同一时间只能存储一个成员的值(即只有一个数据是活跃的)。联合的内存大小取决于其中字节数最多的成员,而不是累加,联合也会进行字长对齐,与位域不同的是,使用联合不会带来任何额外的运行时开销。联合中存储的数据的值完全取决于对它的解释方式。在定义联合变量时可以指定初始值,但是只能指定一个初始值,而且该初始值的类型必须与联合的第一个成员的类型匹配。可以取一个联...
阅读全文
摘要:C++/C学习笔记(六)1.结构(struct)(1)定义C语言支持把基本数据类型组合起来形成更大的构造数据类型,这就是C语言的struct,有时也称为用户自定义数据类型(UDT)。构造数据类型还可以嵌套(对象嵌入)和引用(对像关联)。构造数据类型是一个递归的定义:①由若干基本数据类型组合而成的类型是构造数据类型;②由若干基本数据类型和构造数据类型组合而成的类型是构造数据类型;③由若干构造数据类型组合而成的类型是构造数据类型;语言本身的这种能力使我们能够定义非常复杂的数据结构,例如树(tree)、链表(list)、映射(map)等.(2)关键字struct与...
阅读全文
摘要:很多初学者或者是想当然,或者是被网上的一些错误信息给误导,面试中问到class和struct区别时经常会说class可以继承而struct不可以继承,这是完全错误的。但在C#中,class与struct确实有这点区别(当然不止这一点)。其实,在C++中,这两个关键词并没有大的区别,仅在细节上有些不同。1。 字面上的区别在字面上struct是structure的缩写,通常叫做“结构体”,在C语言里用于将多种数据、多个变量组织在一起,便于表达比较复杂的数据类型,在C++中为了兼容C语言保留了该关键字,并且保留了C语言中的所有功能。而class,则称作“类”,是C++新增来支持面向对象思想概念中“类
阅读全文
摘要:1.引言提起class和struct,我们率先的感受是语法几乎雷同,待遇却翻天复地。历史将接力棒由面向过程编程传到面向对象编程,class和struct也担负着各自的命运前行。在我感受,struct英雄迟暮,class天下独行,最性质的差异是class是引用种类,而struct是值种类,它们在内存中的分配情形有所差异。由此发生的一系列差异性,本文将做以全面谈论。2. 大约观念2.1. 什么是class?class(类)是面向对象编程的大约观念,是一种自定义数据构造种类,等闲包括字段、属性、措施、属性、构造函数、索引器、垄断符等。因为是大约的观念,因而无须在此翔实描写,读者能够查询相干观念打听。
阅读全文
摘要:当private,public,protected单纯的作为一个类中的成员权限设置时:private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问注:友元函数包括两种:设为友元的全局函数,设为友元类中的成员函数当private,public,protected作为继承方式时:对于公有继承方式:(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;(
阅读全文