
C/C++编程
普通网友
这个作者很懒,什么都没留下…
展开
-
cvCalcEigenDecomposite——opencv内置PCA算法的第二个函数小记。
PCA(Eigenface)方法是人脸识别的主流方法之一。cvEigenDecomposite()函数作用是将人脸图像通过Eigenface变换矩阵,投射到子空间中。子空间中的人脸向量,是一个1×nEigens(nEigens由自己取得)的行向量,极大地降低了数据维度,便于下一步的聚类、识别。结合具体例子,尽量清楚地跟大家讨论这个函数的用途。 函数说明如下:Eig转载 2013-02-20 17:20:56 · 504 阅读 · 0 评论 -
随机数
rand()是从srand (seed)中指定的seed开始,返回一个[0,RAND_MAX(0x7fff)]间的随机整数,不设srand,默认seed为1,所以每次都相同。函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子。如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand()。而使用同种子相同的数调用 sran原创 2013-06-09 01:06:10 · 361 阅读 · 0 评论 -
MFC构造内存DC显示图像
CDC dcMem; //用于缓冲作图的内存DC CBitmap bmp; //内存中承载临时图象的位图 dcMem.CreateCompatibleDC(dc); //依附窗口DC创建兼容内存DC,注意dc为程序的窗口dc ,不能使用内存dc如dcMem bmp.CreateCompatibleBitmap原创 2013-05-10 18:30:55 · 1474 阅读 · 0 评论 -
static作用域
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以转载 2013-05-09 00:06:01 · 1701 阅读 · 0 评论 -
全局变量与局部变量同名的后果!
int a;void main(){ int a=5; fft();}void fft(){printf("%d",a)}则a为0.在局部函数中定义了一个同名的变量,此时在MAIN中就会屏蔽掉全局变量,不会给全局的a赋值5.原创 2013-05-09 00:05:35 · 3615 阅读 · 0 评论 -
C语言中extern的用法
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。1. extern修饰变量的声明。举例来说,如果文件a.c需要引用b.c中变量int v,就可以在a.c中声明extern int v,然后就可以引用变量v。这里需要注意的是,被引用的变量v的链接属性必须是外链接(external)的,也就是说a.c要引用到v,不只是取决于在a.c转载 2013-05-07 23:01:06 · 485 阅读 · 0 评论 -
C语言编程中读取文件中的数据
int row,col;float c[100]={0}; FILE *fp;fp=fopen("a.txt","r");fscanf(fp, "%d", &row);fscanf(fp, "%d", &col);for(i=0;i<col*row;i++){fscanf(fp, "%f", &c[i]);}数据是每个中间隔一个空格,例如:3 30.5452 0.原创 2013-05-05 22:38:26 · 980 阅读 · 0 评论 -
C编程对程序计时
#include void main(){ time_t start_time; time_t end_time; time(&start_time); printf("start"); float b=100; float *a=&b; for(int j=0;j<100;j++) { float **Grad_n; Grad_n =new float*[256];原创 2013-04-30 00:42:20 · 667 阅读 · 0 评论 -
多个C与H文件编程
有多个C文件时,可以在一个H文件中进行函数声明,在相应名字的C文件中进行实现。#include:就是把XXXX.h中的内容原封不动的搬过来原创 2013-04-26 22:53:43 · 763 阅读 · 0 评论 -
new和malloc的区别
1、new 是c++中的操作符,new成功了返回分配空间的首地址,否则返回NULL,malloc是c 中的一个函数2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行原创 2013-03-29 22:20:15 · 475 阅读 · 0 评论 -
MFC的调试代码
MFC的调试代码char p[10];itoa(i,p,10);//将i整数转换为字符串类型AfxMessageBox(CString(p),NULL,MB_OK);//调试信息将float类型输出CString mm;mm.Format ("%f",Grad2_n);AfxMessageBox(mm,NULL,MB_OK);原创 2013-04-09 18:26:20 · 474 阅读 · 0 评论 -
地址加1到底加多少?
指针做偏移操作的时候是根据指针的类型来做出移位判断,比如这个例子里面指针是整形,所以每次偏移的时候是按照整形的长度(4字节,32位)偏移,如果指针是char类型,则每次加1是加1个字节。指针自增每次增加的增加量=sizof(你所用的数据类型)比如char型指针 自增的话地址加1int型 一般都是4字节,所以自增会加4.原创 2013-04-08 16:07:06 · 3989 阅读 · 0 评论 -
二维数组的地址问题
如定义 int a[2][2]={1,2,3,4}则 a ,a[0]均为1的地址,两者是一样的,即矩阵的首地址,与a[0][0]的地址一样,a[1]为第二行的首地址。这个与new的不太一样。new的话, a为a[0]的地址,两个不会一样的。原创 2013-04-08 15:33:10 · 570 阅读 · 0 评论 -
四舍五入取整,强制类型转换
floor:地板,向负无穷大取整,floor(2.5)=2.floor(-2.5)=-3;ceil:天花板 ,像正无穷大取整,ceil(2.5)=3强制类型转换,float b=-3.6 b=int(b);//b=-3,舍弃掉后面的小数超出范围的话要注意:如float c=257;c=unsigned char (c)//c=1,超出范围的话,将C作为超出范围的1如果原创 2013-04-07 18:49:45 · 1543 阅读 · 0 评论 -
二位数组中的指针初始化时的地址
unsigned char **Image_Array;Image_Array=(unsigned char**)malloc(sizeof(unsigned char *)*10);//分配指向uchar变量的指针,任何指针都只占4个字节if(Image_Array==NULL){return(-2);}for(int m=0;m<10;m++){Image_Array[m]=原创 2013-04-06 00:05:38 · 494 阅读 · 0 评论 -
二重指针分配矩阵内存并初始化
首先要明白的是:int **a ; a为(指向int类型的指针)的指针METHOD 1:先分配内存malloc1.如果后面初始化赋值了,后面就不用了2.如果后面没有赋值,需要memset了如果说我临时需要一块内存,这块内存用来存储n个int的变量。我就需要使用malloc为pMax分配一块内存。可以这样做:pMax = malloc(sizeof(int) * n);原创 2013-03-29 17:27:21 · 1892 阅读 · 0 评论 -
C语言循环创造文件
#includeint main(){char nameout[20];FILE *fout;int i,n=100;for (i=1;i<=n;i++){sprintf(nameout,"C:\\%d.txt",i);fout=fopen(nameout,"w");fprintf(fout,"%d",i);fclose(fout);}return 0;}原创 2014-09-05 17:44:37 · 1150 阅读 · 0 评论