三种方法分别问:

指针访问: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. oracle获取表字段属性

    select b.COMMENTS,a.COLUMN_NAME,a.DATA_TYPE,a.DATA_LENGTH, a.DATA_PRECISION,a.DATA_SCALE,a.NULLABLE, ...

  2. python CSS

    CSS 一. css的四种引入方式   1.行内式  2.嵌入式  3. 链接式 将一个.css文件引入到HTML文件中 1 <link href="mystyle.css" ...

  3. Python/Django-Web原理(一)

    Python/Django-Web原理(一) websocket webSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML规范中被引用为TCP连接,作为基于TCP的套接字AP ...

  4. JavaScript 以及 css3进度条

    JavaScript css3进度条 使用css3实现进度条 <!DOCTYPE html> <html lang="en"> <head> & ...

  5. tar磁带归档

    一:压缩.解压 1.compress/uncompress/zcat -d:解压 -c:输出到终端,不删除原文件 -v:显示详细信息 2.gzip/ungzip/zcat -d:解压 -c:将压缩或解 ...

  6. 南京邮电大学java程序设计作业在线编程第三次作业

    王利国的"Java语言程序设计第3次作业(2018)"详细 作业结果详细 总分:100 选择题得分:60  1. 设有如下定义语句: String s1="My cat& ...

  7. js正则表达式入门以及常见用例

    学习正则表达式的最好方法是从例子开始,理解例子之后再自己对例子进行修改,实验.下面给出了不少简单的例子,并对它们作了详细的说明. 假设你在一篇英文小说里查找hi,你可以使用正则表达式hi. 这几乎是最 ...

  8. https://segmentfault.com/a/1190000004518374#articleHeader3

    https://segmentfault.com/a/1190000004518374#articleHeader3 https://segmentfault.com/q/10100000049065 ...

  9. C/C++下调用matlab函数操作说明

    1.matlab的安装 连接:http://pan.baidu.com/s/1qXuF7aO 安装32位版本的matlab(在目录下bin文件夹中有两个文件夹,选择win32文件夹下的setup进行安 ...

  10. Spring-framework 源码导入 IntelliJ IDEA 记录

    前言 想学习spring框架,不看源码怎么行.网上有很多教程,但是自己实施起来还是稍微有点坎坷的,不过最后还是成功了.遂以此文记录. 环境说明: Idea  2017.2.5 spring-frame ...