int*v=newint[src.cols*4]

在学习:使用OpenCV2.x计算图像的水平和垂直积分投影中,有下图一种代码:

int*v=newint[src.cols*4]

int*v=newint[src.cols*4]

int*v=newint[src.cols*4]

int*v=newint[src.cols*4]

 

 对比上面两个代码对于同一张图片求得的结果会发现不同;

为什么会出现这个原因呢?不知道为啥这样初始化?

首先查看一下图片深度

int*v=newint[src.cols*4]

 

 

 在了解一下8位, 16位,24位,32位图片显示原理及对比

以及这段代码的意思:c++学习之new int()和new int[]的区别

我们这段代码int* v = new int[src.cols * 4];memset(v, 0, src.cols * 4);

int* v = new int[src.cols * 4]在堆里分配内存,需要通过delete来释放,内存大小为src.cols * 4;

那为什么后面需要*4,不是其他数字呢

解释1:

int* v = new int[src->width];//用于记录每一列中像素值大于0的个数
int* h = new int[src->height];//用于记录每一行中像素值大于0的个数
memset(v, 0, src->width * 4);//为新申请的内存做初始化工作,初始化为0,int占4个字节,所以块的大小为src->width * 4 memset(h, 0, src->height * 4);//为新申请的内存做初始化工作,初始化为0,int占4个字节,所以块的大小为src->height * 4:

解释2:https://bbs.csdn.net/topics/390262091?page=1#post-392866591

int*v=newint[src.cols*4]

 

 int*v=newint[src.cols*4]

 

int*v=newint[src.cols*4]

上一篇:Windows查看端口使用状况(转)


下一篇:禁用Win10自带截图工具快捷键(Shift+Win+S)