多通道图像遍历

方法一:普通遍历

[cpp]  view plain  copy
  1. for(int y = 0;y < height; y++)//行              
  2.     {  
  3.         for(int x = 0; x < width; x++)//列  
  4.         {  
  5.             Scalar pix = srcImg.at<Vec3b>(y,x);  
  6.             int channle0 = pix[0];  
  7.             int channle1 = pix[1];  
  8.             int channle2 = pix[2];  
  9.         }  
  10.     }     

方法二:行指针,比较高效

[cpp]  view plain  copy
  1. for(int y = 0;y < height; y++)//行           
  2. {  
  3.     Vec3b *pSrcData = srcImg.ptr<Vec3b>(y);//每一行的指针  
  4.     for(int x = 0; x < width; x++)//列  
  5.     {  
  6.         int channle0 = pSrcData[x][0];  
  7.         int channle1 = pSrcData[x][1];  
  8.         int channle2 = pSrcData[x][2];  
  9.     }  
  10. }  
 

 
方法三:行指针,比方法二高效 

[cpp]  view plain  copy
  1. for(int y = 0;y < height; y++)//行              
  2.     {  
  3.         uchar *pSrcData = srcImg.ptr<uchar>(y);//每一行的指针  
  4.         for(int x = 0; x < width; x++)//列  
  5.         {  
  6.             int channle0 = pSrcData[x*channel];  
  7.             int channle1 = pSrcData[x*channel+1];  
  8.             int channle2 = pSrcData[x*channel+2];  
  9.         }  
  10.     }  

在每一行数据元素之间在内存里是连续存储的,因为图像在OpenCV里的存储机制问题,行与行之间可能有空白单元。

方法四:数据指针。高效

[cpp]  view plain  copy
  1. uchar *pSrcData = srcImg.data;//每一行的指针  
  2.     for(int y = 0;y < height; y++)//行              
  3.     {  
  4.         for(int x = 0; x < width; x++)//列  
  5.         {  
  6.             int channle0 = pSrcData[y*width*channel+x*channel];  
  7.             int channle1 = pSrcData[y*width*channel+x*channel+1];  
  8.             int channle2 = pSrcData[y*width*channel+x*channel+2];  
  9.         }  
  10.     }  
一般来说图像行与行之间往往存储是不连续的,但是有些图像可以是连续的,Mat提供了一个检测图像是否连续的函数isContinuous()。当图像连通时,我们就可以把图像完全展开,看成是一行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值