在学习:使用OpenCV2.x计算图像的水平和垂直积分投影中,有下图一种代码:
对比上面两个代码对于同一张图片求得的结果会发现不同;
为什么会出现这个原因呢?不知道为啥这样初始化?
首先查看一下图片深度
以及这段代码的意思: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