三种方法分别问:

指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div);

迭代器访问:void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div);

动态地址计算:void colorReduce_at(cv::Mat &inputImage, cv::Mat &outputImage, int div);

#include <opencv.hpp>
#include <iostream> using namespace std; void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div);
void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div);
void colorReduce_at(cv::Mat &inputImage, cv::Mat &outputImage, int div); void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div)
{
outputImage = inputImage.clone();
int rowNumber = outputImage.rows;
int colNumber = outputImage.cols*outputImage.channels();
for (size_t i = ; i < rowNumber; i++)
{
uchar* data = outputImage.ptr<uchar>(i);
for (size_t j = ; j < colNumber; j++)
{
data[j] = data[j] / div*div + div / ;
}
}
} void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div)
{
outputImage = inputImage.clone();
cv::Mat_<cv::Vec3b>::iterator it = outputImage.begin<cv::Vec3b>();
cv::Mat_<cv::Vec3b>::iterator it_end = outputImage.end<cv::Vec3b>(); for (;it != it_end; ++it)
{
for (size_t px = ; px < ; px++)
{
(*it)[px] = (*it)[px] / div*div + div / ;
}
}
} void colorReduce_at(cv::Mat &inputImage, cv::Mat &outputImage, int div)
{
outputImage = inputImage.clone();
int rowNumber = outputImage.rows;
int colNumber = outputImage.cols; for (size_t i = ; i < rowNumber; i++)
{
for (size_t j = ; j < colNumber; j++)
{
for (size_t px = ; px < ; px++)
{
outputImage.at<cv::Vec3b>(i, j)[px] = outputImage.at<cv::Vec3b>(i, j)[px] / div * div + div / ;
}
}
}
} int main(int argc, char** argv[])
{
cv::Mat srcImg = cv::imread("E:/data/lena.jpg");
cv::imshow("srcImg", srcImg); cv::Mat dstImg;
dstImg.create(srcImg.rows, srcImg.cols, srcImg.type()); double timeStart;
timeStart = static_cast<double>(cv::getTickCount());
colorReduce_ptr(srcImg, dstImg, );
timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
cout << "ptr方法运行时间为:" << timeStart << "秒" << endl; timeStart = static_cast<double>(cv::getTickCount());
colorReduce_iterator(srcImg, dstImg, );
timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
cout << "iterator方法运行时间为:" << timeStart << "秒" << endl; timeStart = static_cast<double>(cv::getTickCount());
colorReduce_at(srcImg, dstImg, );
timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
cout << "at方法运行时间为:" << timeStart << "秒" << endl; cv::imshow("dstImg", dstImg);
cv::waitKey();
}

opencv 3.1.0 访问像素值的三种方法(C++)的更多相关文章

  1. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  2. struts2的action访问servlet API的三种方法

    学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...

  3. Action访问Servlet API的三种方法

    一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...

  4. Mybatis+Mysql插入数据库返回自增主键id值的三种方法

    一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...

  5. RHEL7.0 配置网络IP的三种方法

    导读 RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编 ...

  6. 在JS方法中返回多个值的三种方法

    在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...

  7. 在JS方法中返回多个值的三种方法(转载)

    来源:https://www.cnblogs.com/gxsyj/p/6004574.html 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数 ...

  8. Javascript获取value值的三种方法及注意点

    JavaScript获取value值,主要有以下三种: 1.用document.getElementById(“id名”).value来获取(例1): 2.通过form表单中的id名或者name名来获 ...

  9. JS判断一个数组中是否有重复值的三种方法

    方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...

随机推荐

  1. C#微信公众号——消息处理

    ​当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL. 一.接收POST请求,处理XML信息 public void ProcessRequest(HttpC ...

  2. MFC基础

    入门博客:http://www.cnblogs.com/qinfengxiaoyue/category/451679.html 消息机制:http://www.cnblogs.com/qinfengx ...

  3. Linux命令(持续更新中)

    命令名 用法 安装上传下载 yum install lrzsz   rz上传文件,sz下载文件 压缩 解压文件 tar -zxvf  文件名 压缩文件 tar -zcvf 文件名 删除非空目录: rm ...

  4. WKWebView使用

    WKWebView比之之前使用的UIWebView更加具有优势,UIWebView更加的笨重,UIWebView占用更多的内存,且内存的峰值更加的夸张,WKWebView加载的速度也更快,而且其更多的 ...

  5. 树莓派(1)- Raspberry Pi 3B 安装系统并联网

    一.背景 昨天到手淘宝买的3B,既然买了就不能让它吃灰,动起来. 二.物料 名称 说明 硬件  树莓派3B 主体 树莓派电源 5V 2A sd卡 4G低速(推荐是16G class10),我手头只有这 ...

  6. Vue还有这种操作?浅析几个新手常常忽略的API

    一:实现子组件与父组件双向绑定的"sync": 一般来说,我们实现父子组件值的传递通常使用的是[props]和自定义事件[$emit].父组件通过[props]将值传给子组件,子组 ...

  7. 解决将/etc/passwd文件中1000改为0后只能guest进入系统的问题 ||ubuntu下将普通用户权限升级为root用户权限的方法;

    其实我现在才知道linux系统对于用户权限管理比较严,在ubuntu下系统不允许root权限的用户进入图像界面系统.由于之前没弄过权限这个东西瞬间掉坑了了. 我是想修改一下root下的nginx.co ...

  8. [LeetCode] Minimum ASCII Delete Sum for Two Strings 两个字符串的最小ASCII删除和

    Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...

  9. [ Java学习基础 ] String字符串的基本操作

    字符串的拼接 String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象.String字符串拼接的时候可以使用"+"运算符或String的concat(S ...

  10. [HAOI2007]覆盖问题

    题目描述 某人在山上种了N棵小树苗.冬天来了,温度急速下降,小树苗脆弱得不堪一击,于是树主人想用一些塑料薄膜把这些小树遮盖起来,经过一番长久的思考,他决定 用3个L*L的正方形塑料薄膜将小树遮起来.我 ...