opencv获取mat的指针_Opencv中Mat数据访问方式效率对比分析

本文对比了OpenCV中三种矩阵访问方式的效率:使用连续性、指针和at函数。实验结果显示,对于连续的矩阵,通过指针访问的computeWithContinious方法效率最高,其次是computeWithPointer,最慢的是computeWithAt。测试结果受到硬件和内存对齐的影响,不同环境下可能有所差异。
摘要由CSDN通过智能技术生成

OPENCV库是一个应用非常广泛的计算机视觉与机器学习库,而对矩阵的访问也是最常见.的操作。尽管OPENCV已经升级了N多次,最新版本是2.4.6,但对数据的访问一直还是延续OPENCV1.X中讲解的效率最高的访问方式,也即指针方式。今天偶来兴致,想测测自己频繁使用访问数组方式的各种效率,结果令人惊讶(本测试是在OPENCV2.4.6库下进行的)。

首先准备下面三段代码(函数代码很简单,就是逐个访问矩阵中的元素):

1)根据矩阵的连续性进行访问(一直以为是效率最高的方式)

void computeWithContinious( Mat& _src, Mat& _dst, float scale){_dst = cv::Scalar::all(0);int i, j;Size size = _src.size();int chns = _src.channels();if( _src.isContinuous() && _dst.isContinuous() ){size.width *= size.height;size.height = 1;}for( i = 0; i < size.height; i++ ){const unsigned char* src = (const unsigned char*)(_src.data + _src.step*i);unsigned char* dst = ( unsigned char*)(_dst.data + _dst.step*i);for( j =0; j < size.width; j++ ){if ( chns ==1){dst[j] = src[j];}else{dst[j*chns] = ( unsigned char)(src[j*chns]*scale);dst[j*chns

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值