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 +=
来源:学生作业帮助网 编辑:作业帮 时间:2024/06/21 04:07:38
![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 +=](/uploads/image/z/4724338-58-8.jpg?t=OPenCV%E4%B8%AD%E7%B4%AF%E5%8A%A0%E4%B8%80%E4%B8%AA%E4%B8%89%E9%80%9A%E9%81%93%E7%9F%A9%E9%98%B5%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E5%85%83%E7%B4%A0%EF%BC%9A%E7%A8%8B%E5%BA%8F%E4%B8%BA%EF%BC%9Afloat+sum%28+const+CvMat%2A+mat+%29%7B+float+s+%3D+0.0f%3B+for%28int+row%3D0%3B+rowrows%3B+row%2B%2B+%29%7B+const+float%2A+ptr%3D%28const+float%2A%29%28mat-%3Edata.ptr+%2B+row+%2A+mat-%3Estep%29%3B+for%28+col%3D0%3B+colcols%3B+col%2B%2B+%29+%7B+s+%2B%3D)
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 +=
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); 这句程序的详细意思,看不懂
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 +=
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了