【学习OpenCV】【纠正代码】累加一个三通道矩阵中的所有元素

【学习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");
 }

本人才疏学浅,如有错漏,欢迎指正!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值