一般来说,如果是遍历数据的话用指针ptr比用at要快。特别是在debug版本下。因为debug中,OpenCV会对at中的坐标检查是否有溢出,这是非常耗时的。

代码如下

#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <iostream> int main()
{
char *srcName="e://vedio//001.jpg";
char *dstName="e://vedio//001dst.jpg"; cv::Mat src=cv::imread(srcName,cv::IMREAD_COLOR);
cv::Mat dst=src.clone(); int nChannels=src.channels();
int nTimes=; double t=cv::getTickCount();
for(int i=;i<nTimes;i++)
{
for(int r=;r<src.rows;r++)
{
for(int c=;c<src.cols;c++)
{
dst.at<cv::Vec3b>(r,c)=cv::Vec3b(src.at<cv::Vec3b>(r,c)[]/,src.at<cv::Vec3b>(r,c)[]/,src.at<cv::Vec3b>(r,c)[]/);;
}
}
}
t=(cv::getTickCount()-t)/cv::getTickFrequency();
std::cout<<"第1种方法消耗的时间为"<<t<<"秒"<<std::endl; uchar *input,*output;
t=cv::getTickCount();
for(int i=;i<nTimes;i++)
{
for(int r=;r<src.rows;r++)
{
input=src.ptr<uchar>(r);
output=src.ptr<uchar>(r);
for(int c=;c<src.cols*nChannels;c++)
{
output[c]=input[c]/;
}
}
}
t=(cv::getTickCount()-t)/cv::getTickFrequency();
std::cout<<"第2种方法消耗的时间为"<<t<<"秒"<<std::endl; t=cv::getTickCount();
for(int i=;i<nTimes;i++)
{
for(int r=;r<src.rows;r++)
{
input=src.ptr<uchar>(r);
output=src.ptr<uchar>(r);
for(int c=;c<src.cols*nChannels;c++)
{
*output++=*input++/;
}
}
}
t=(cv::getTickCount()-t)/cv::getTickFrequency();
std::cout<<"第3种方法消耗的时间为"<<t<<"秒"<<std::endl; int nRows=src.rows;
int nCols=src.cols;
if(src.isContinuous())
{
nCols*=nRows;
nRows=;
}
t=cv::getTickCount();
for(int i=;i<nTimes;i++)
{
for(int r=;r<nRows;r++)
{
input=src.ptr<uchar>(r);
output=src.ptr<uchar>(r);
for(int c=;c<nCols*nChannels;c++)
{
*output++=*input++/;
}
}
}
t=(cv::getTickCount()-t)/cv::getTickFrequency();
std::cout<<"第4种方法消耗的时间为"<<t<<"秒"<<std::endl; return ; }

OpenCV几种访问cv::Mat数据的方法的更多相关文章

  1. WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )

    WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...

  2. 访问cv::Mat中的数据时遇到的指针类型问题

    在用Opencv的时候由于下图原本的图像尺寸是1111*1111,要进行resize,代码如下: cv::Mat img = cv::imread("//Users//apple//td3/ ...

  3. 除了GPS外的4种获得用户地理位置数据的方法

    纯粹的GPS解决方案以及它所生成的经纬度标签是地理位置数据的公认标准.但是至少还有4种方法可以获得地理位置数据: 1.手机信号塔数据:当移动设备的GPS芯片不能接收到GPS信号时,移动设备就需要与它所 ...

  4. Django—Form两种保留用户提交数据的方法

    用户在网页上进行表单填写时,有可能出现某项填写错误.一般情况下,用户在未发觉错误的情况下点击提交,则此表单的内容会清空,用户不得不再重新填写,这样的用户体验是及其糟糕的. 在此,我们有2种方法将用户的 ...

  5. 一种动态写入apk数据的方法(用于用户关系绑定、添加渠道号等)

    背景: 正在开发的APP需要记录业务员与客户的绑定关系.具体应用场景如下: 由流程图可知,并没有用户填写业务人员信息这一步,因此在用户下载的APP中就已经携带了业务人员的信息. 由于业务人员众多,不可 ...

  6. cv.Mat 与 .txt 文件数据的读写操作

    1.按OpenCV格式实现的 .txt 文件读写 可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用  .xml/.y ...

  7. 【记录一个问题】android下的ucontext协程,因为使用栈上的对象,导致cv::Mat被莫名析构

    工作的流程是这样:某个协程在栈上创建task对象,在task对象内有需要返回的cv::Mat. 然后把task放到另一个线程上去执行,然后切换到别的协程,等到工作线程执行完task后,再唤醒协程. 这 ...

  8. 两分钟解决Python读取matlab的.mat数据

    Matlab是学术界非常受欢迎的科学计算平台,matlab提供强大的数据计算以及仿真功能.在Matlab中数据集通常保存为.mat格式.那么如果我们想要在Python中加载.mat数据应该怎么办呢?所 ...

  9. C#中在WebClient中使用post发送数据实现方法

    很多时候,我们需要使用C#中的WebClient 来收发数据,WebClient 类提供向 URI 标识的任何本地.Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法 ...

随机推荐

  1. django面试八

    1. 对Django的认识? #1.Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后台. #2.Dja ...

  2. mail命令入门及进阶

    mail是linux shell中的邮件工具,与crontab配合使用,可以实现定期发送邮件.本文主要介绍mail工具使用方法及注意事项. 1.mail命令一般用法: mail –s "邮件 ...

  3. react state为数组时插入值

    react state为数组时,如何插入值.在react里,一切皆是状态state,如果想通过改变state修改渲染效果,只能yongsetState.但是setState又是key:value格式, ...

  4. Ubuntu add sudo

    为了安全起见,ubuntu中的普通用户一般没有root权限,因此即使知道管理员密码也无法使用sudo,但这个情况可以通过加入sudoer列表或者加入sudo组来改变. 拓展: 不管使用哪种方式,使得一 ...

  5. Android Native Hook技术(一)

    原理分析 ADBI是一个著名的安卓平台hook框架,基于 动态库注入 与 inline hook 技术实现.该框架主要由2个模块构成:1)hijack负责将so注入到目标进程空间,2)libbase是 ...

  6. phpstorm使用zen coding 快速编辑补全html/css代码

    百科定义: 使用仿CSS选择器的语法来快速开发HTML和CSS ——由Sergey Chikuyonok开发. Zen Coding由两个核心组件组成:一个缩写扩展器(缩写为像CSS一样的选择器)和上 ...

  7. 九度OJ-1131-合唱排队-双向递增子序列

    题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4948 解决:1570 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交 ...

  8. 【CSP】字符与int

    [转自https://yq.aliyun.com/articles/19153] WIKIOI-1146 ISBN号码   光仔december 2014-03-01 16:20:00 浏览479 评 ...

  9. NYOJ 6:喷水装置(一)(贪心)

    6-喷水装置(一) 内存限制:64MB 时间限制:3000ms 特判: No 通过数:68 提交数:111 难度:3 题目描述: 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水 ...

  10. Arrays ---------------copyOf赋值