三种方法分别问:

指针访问: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);

  1. #include <opencv.hpp>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div);
  7. void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div);
  8. void colorReduce_at(cv::Mat &inputImage, cv::Mat &outputImage, int div);
  9.  
  10. void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div)
  11. {
  12. outputImage = inputImage.clone();
  13. int rowNumber = outputImage.rows;
  14. int colNumber = outputImage.cols*outputImage.channels();
  15. for (size_t i = ; i < rowNumber; i++)
  16. {
  17. uchar* data = outputImage.ptr<uchar>(i);
  18. for (size_t j = ; j < colNumber; j++)
  19. {
  20. data[j] = data[j] / div*div + div / ;
  21. }
  22. }
  23. }
  24.  
  25. void colorReduce_iterator(cv::Mat &inputImage, cv::Mat &outputImage, int div)
  26. {
  27. outputImage = inputImage.clone();
  28. cv::Mat_<cv::Vec3b>::iterator it = outputImage.begin<cv::Vec3b>();
  29. cv::Mat_<cv::Vec3b>::iterator it_end = outputImage.end<cv::Vec3b>();
  30.  
  31. for (;it != it_end; ++it)
  32. {
  33. for (size_t px = ; px < ; px++)
  34. {
  35. (*it)[px] = (*it)[px] / div*div + div / ;
  36. }
  37. }
  38. }
  39.  
  40. void colorReduce_at(cv::Mat &inputImage, cv::Mat &outputImage, int div)
  41. {
  42. outputImage = inputImage.clone();
  43. int rowNumber = outputImage.rows;
  44. int colNumber = outputImage.cols;
  45.  
  46. for (size_t i = ; i < rowNumber; i++)
  47. {
  48. for (size_t j = ; j < colNumber; j++)
  49. {
  50. for (size_t px = ; px < ; px++)
  51. {
  52. outputImage.at<cv::Vec3b>(i, j)[px] = outputImage.at<cv::Vec3b>(i, j)[px] / div * div + div / ;
  53. }
  54. }
  55. }
  56. }
  57.  
  58. int main(int argc, char** argv[])
  59. {
  60. cv::Mat srcImg = cv::imread("E:/data/lena.jpg");
  61. cv::imshow("srcImg", srcImg);
  62.  
  63. cv::Mat dstImg;
  64. dstImg.create(srcImg.rows, srcImg.cols, srcImg.type());
  65.  
  66. double timeStart;
  67. timeStart = static_cast<double>(cv::getTickCount());
  68. colorReduce_ptr(srcImg, dstImg, );
  69. timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
  70. cout << "ptr方法运行时间为:" << timeStart << "秒" << endl;
  71.  
  72. timeStart = static_cast<double>(cv::getTickCount());
  73. colorReduce_iterator(srcImg, dstImg, );
  74. timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
  75. cout << "iterator方法运行时间为:" << timeStart << "秒" << endl;
  76.  
  77. timeStart = static_cast<double>(cv::getTickCount());
  78. colorReduce_at(srcImg, dstImg, );
  79. timeStart = ((double)cv::getTickCount() - timeStart) / cv::getTickFrequency();
  80. cout << "at方法运行时间为:" << timeStart << "秒" << endl;
  81.  
  82. cv::imshow("dstImg", dstImg);
  83. cv::waitKey();
  84. }

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. SSM登陆注册

    package com.coingod.controller; import java.io.IOException;import java.io.PrintWriter;import java.ut ...

  2. Eureka服务注册中心

    Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...

  3. springboot启动报错

    新建springboot整合aop记录web日志的过程中启动失败 错误如下: ***************************APPLICATION FAILED TO START******* ...

  4. java之设计模式工厂三兄弟之抽象工厂模式

    [学习难度:★★★★☆,使用频率:★★★★★]  工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工 ...

  5. 机器学习基石:Homework #0 SVD相关&常用矩阵求导公式

  6. PyQT5 helloworld教程(转载)

    转载节选自该博客地址:http://blog.csdn.net/u013401853/article/details/54581512,博主的步骤写的很详细,感谢! QT Creator安装 因为我们 ...

  7. Discuz! 7.x 反射型xss

    引用:http://wooyun.jozxing.cc/static/bugs/wooyun-2014-084097.html 在/include/global.func.php 文件中 第1036- ...

  8. [Awson原创]修水渠(canal)

    Description Awson是某国际学校信竞组的一只菜鸡.他们班主任F老师喜欢带他们去爬爬唷喽山.登顶后,Awson有了个奇怪的发现. 山腰上有N(1<=N<=100)个村庄,这些村 ...

  9. ●CodeForces 429D Trick_Function

    题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...

  10. CSAPP-过程调用,数据存储,缓冲区溢出

    程序编译: 1.预处理阶段: 1.文件包含:将#include扩展成文件正文 2.条件编译:根据#if和#ifdef将程序的某部分排除或者包含 3.宏展开:将出现宏引用的地方展开成相应的宏 2.编译阶 ...