1.指针访问像素

void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{outputImage = inputImage.clone();int rows = outputImage.rows;int cols = outputImage.cols*outputImage.channels();for (int i = 0; i < rows; i++){/*uchar* data = inputImage.ptr<uchar>(i);*/uchar* data = outputImage.ptr<uchar>(i);for (int j = 0; j < cols; j++){data[j] = data[j] / div*div + div / 2;}}}

ptr获取对应i行的首地址,再用j遍历该行的所有列实现遍历的目的

2.迭代器

void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{outputImage = inputImage.clone();Mat _<Vec3b>::iterator it = outputImage.begin<Vec3b>();//初始位置迭代器Mat _<Vec3b>::iterator itend = outputImage.end<Vec3b>();//初始位置迭代器for (; it != itend; it++){(*it)[0] = (*it)[0]/div*div+div/2;(*it)[1] = (*it)[1]/div*div+div/2;(*it)[2] = (*it)[2]/div*div+div/2;}
}

在迭代器方法中,我们只需要得到图像矩阵的begin和end,然后在此区间增加迭代,将*操作符添加在迭代指针前就可以访问当前所指内容

3.动态地址计算

void colorReduce(Mat& inputImage, Mat& outputImage, int div)
{outputImage = inputImage.clone();int rows = outputImage.rows;int cols = outputImage.cols;for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){outputImage.at<Vec3b>(i,j)[0] = outputImage.at<Vec3b>(i,j)[0]/div*div+div/2;outputImage.at<Vec3b>(i,j)[1] = outputImage.at<Vec3b>(i,j)[1]/div*div+div/2;outputImage.at<Vec3b>(i,j)[2] = outputImage.at<Vec3b>(i,j)[2]/div*div+div/2;}}}

要说明的是彩色图像不是以RGB形式存放的,而是BGR,所以outputImage.at(i,j)[0] 代表B分量,同理还有(*it)[0]。

遍历图片像素的三种方法相关推荐

  1. OpenCV精进之路(零):访问图像中像素的三种方法

    访问像素的三种方法 指针访问:最快 迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 动态地址计算:更慢,通过at()实现.适用于访问具体某个第i行,j列的像素,而不适用遍历像素 这里 ...

  2. c# pictureBox1.Image的获得图片路径的三种方法 winform

    代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径: this.pictureBox2.Image=Image.FromFile("D: ...

  3. Opencv3编程入门学习笔记(三)之访问图像像素的三种方法

    访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...

  4. Java中遍历Set集合的三种方法

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  5. 遍历List集合的三种方法

    遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa"); li ...

  6. Java中遍历Set集合的三种方法(实例代码)

    哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...

  7. 如何提高图片清晰度?三种方法来帮你!

    如何提高图片清晰度?图片在上传到网络后会被压缩,导致图片变得模糊.今天,我将分享三种方法,帮助您提高图片的清晰度. 方法一:使用记灵在线工具 工具地址:记灵在线工具 - 更专注于发现工具的实用性 该工 ...

  8. OpenCV访问像素的三种方法

    三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...

  9. Android中图片圆形设置三种方法介绍

    Android开发中经常会用到圆形图片,比如在用户头像设置,现在提供三种主要实现方式: 方案一:使用第三方图像框架 Fresco 1.添加依赖 dependencies {compile 'com.f ...

最新文章

  1. 省市县三级级联(模块化开发)
  2. 动态获取的图片当做背景,而且图片是小图
  3. SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输
  4. sql item_map
  5. 主成分分析(PCA)——以2维图像为例
  6. window 之命令行的cd
  7. kali linux set工具,求助: 社会工程学工具set 出现错误for kali linux.
  8. Jupyter Notebook 代码补全功能配置
  9. office未响应(2010、2013……)崩溃
  10. 简书项目实战-main首页开发
  11. Linux那些让你虎躯一震的命令
  12. 【C语言】解决 “address of stack memory associated with local variable ‘num‘ returned”
  13. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
  14. 码元、符号、波特率、比特率等概念的了解
  15. ldap + sentry架构的相关结论的验证
  16. B2B的商务模式主要存在哪些缺点?
  17. perl和python各自擅长的领域
  18. 详细的买卖天猫店铺网店转让步骤
  19. 以太坊学习路线——(二、下)以太坊编程接口:web3.js
  20. 华为工程师总结的LeetCode刷题笔记提供下载,太优秀了

热门文章

  1. php 油耗,百公里平均油耗差1L多,一年油费究竟差多少?
  2. memset 用法 linux,bzero, memset ,setmem 区别
  3. python新手如何写代码_Python新人指南[2]
  4. erl命令行的一些基本操作
  5. 常见手机快充协议介绍
  6. 电脑不小心删除的文件怎么恢复?
  7. 用python做数字油画或者从一幅画学习风格,去画另一幅画
  8. Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB
  9. 【3D旋转墙】最简单的3d旋转墙
  10. putenv() has been disabled for security reasons [srv_status.php:22 → require_once() → ZBase-run() →