【学习OpenCV】【纠正代码】累加一个三通道矩阵中的所有元素
近期想把学习《学习OpenCV》这本书中的错误梳理一下,这本书调理和内容总体不错,但就是错误太多,加字漏字,大小写错误,有些翻译非常牵强,相信很多人被坑的很惨(论英文水平的重要性(>_<)...)。
本例原书page45,例3-9,看到s+=*ptr++基本就知道这段代码错误了,根本无法累加三通道所有元素,当指针指向一个坐标数据时候,需要把对应的三个数据都累加,而这段代码做不到。
#include<iostream>
#include<cv.h>
#include<highgui.h>
using namespace std;
int main()
{
float vals[12]={0.5,0.5,0.5,
0.5,0.5,0.5,
0.5,0.5,0.5,
0.5,0.5,0.5};
float sum=0;
CvMat mat=cvMat(2,2,CV_32FC3,vals);
for(int y=0;y<mat.height;y++)
{
float* ptr=(float*)(mat.data.ptr+y*mat.step); //注意ptr是一个float类型的指针,ptr+1地址将移动4字节
for(int x=0;x<mat.width;x++)
{
float channel_B=*ptr;
float channel_G=*(ptr+1);
float channel_R=*(ptr+2); //将各个通道数据拿出来
sum=sum+channel_B+channel_G+channel_R;
ptr=ptr+3;
}
}
cout<<"sum="<<sum<<endl;
system("pause");
}
本人才疏学浅,如有错漏,欢迎指正!