OPenCV中累加一个三通道矩阵中的所有元素:
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/19 12:37:49
OPenCV中累加一个三通道矩阵中的所有元素:
程序为:
float sum( const CvMat* mat )
{
float s = 0.0f;
for(int row=0; rowrows; row++ )
{
const float* ptr=(const float*)(mat->data.ptr + row * mat->step);
for( col=0; colcols; col++ )
{
s += *ptr++;
}
}
return( s );
}
我想问const float* ptr=(const float*)(mat->data.ptr + row * mat->step); 这句程序的详细意思,看不懂
程序为:
float sum( const CvMat* mat )
{
float s = 0.0f;
for(int row=0; rowrows; row++ )
{
const float* ptr=(const float*)(mat->data.ptr + row * mat->step);
for( col=0; colcols; col++ )
{
s += *ptr++;
}
}
return( s );
}
我想问const float* ptr=(const float*)(mat->data.ptr + row * mat->step); 这句程序的详细意思,看不懂
mat->data.ptr 是指向 mat中数据的指针,是char 的
而mat中的数据,是float的
所以,在前面进行了强制转换 (const float*)
mat->step,是mat中,每行数据的长度
不过,感觉这里这么用不对头,因为 step,也是以byte为单位的,而前面已经强制成float了,所以就被人为放大了
先定义一个中间指针
char *ptr1;
ptr1 = mat->data.ptr + row * mat->step;
ptr = =(const float*)ptr1;
这样就可以了
还有可改进的地方,循环内
每次指针
ptr1 += mat->step;
就可以,不用乘row了
再问: 加一个中间指针,把const float* ptr=(const float*)(mat->data.ptr + row * mat->step); 分成两句有本质的区别吗?不太清楚哦,请指教!!
再答: 分开后 step 就是按 char 的长度增加指针 不分,就是按 float 的长度
而mat中的数据,是float的
所以,在前面进行了强制转换 (const float*)
mat->step,是mat中,每行数据的长度
不过,感觉这里这么用不对头,因为 step,也是以byte为单位的,而前面已经强制成float了,所以就被人为放大了
先定义一个中间指针
char *ptr1;
ptr1 = mat->data.ptr + row * mat->step;
ptr = =(const float*)ptr1;
这样就可以了
还有可改进的地方,循环内
每次指针
ptr1 += mat->step;
就可以,不用乘row了
再问: 加一个中间指针,把const float* ptr=(const float*)(mat->data.ptr + row * mat->step); 分成两句有本质的区别吗?不太清楚哦,请指教!!
再答: 分开后 step 就是按 char 的长度增加指针 不分,就是按 float 的长度
OPenCV中累加一个三通道矩阵中的所有元素:
OPENCV中矩阵通道是什么意思,如何理解
lingo软件中怎样累加矩阵中所有元素
opencv 矩阵每个元素同时除以一个数值
在lingo中 怎么实现矩阵中部分元素累加?
mathematica 如何在矩阵中提取部分元素累加
MATLAB中如何判断一个矩阵的所有元素大于另一个矩阵的所有元素?
opencv中如何将两个类型为Mat的矩阵合为一个矩阵?
opencv中的函数在opencv中该函数是什么意思?cvCvtPixToPlane
opencv 矩阵 “ 矩阵的作用是什么 还用通道和矩阵有什么关系.她和图像有什么关系
c语言 有一个3*4的矩阵,求所有元素中的最大值
求一个4行4列的整形矩阵的所有元素中的最大值和最小值.