遍历图片像素的三种方法
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]。
遍历图片像素的三种方法相关推荐
- OpenCV精进之路(零):访问图像中像素的三种方法
访问像素的三种方法 指针访问:最快 迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 动态地址计算:更慢,通过at()实现.适用于访问具体某个第i行,j列的像素,而不适用遍历像素 这里 ...
- c# pictureBox1.Image的获得图片路径的三种方法 winform
代码如下:c# pictureBox1.Image的获得图片路径的三种方法 winform 1.绝对路径: this.pictureBox2.Image=Image.FromFile("D: ...
- Opencv3编程入门学习笔记(三)之访问图像像素的三种方法
访问图像像素的三种方法:指针访问,迭代器访问,动态地址访问.访问最快的为指针访问,以下算法在几毫秒,但指针访问容易造成内存泄漏:其次为迭代器访问:最后为动态地址访问. 以下程序是根据<OpenC ...
- Java中遍历Set集合的三种方法
Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...
- 遍历List集合的三种方法
遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa"); li ...
- Java中遍历Set集合的三种方法(实例代码)
哈喽,欢迎来到小朱课堂,下面开始你的学习吧! Java中遍历Set集合的三种方法 废话不多说,直接上代码 1.迭代遍历: Set set = new HashSet(); Iterator it = ...
- 如何提高图片清晰度?三种方法来帮你!
如何提高图片清晰度?图片在上传到网络后会被压缩,导致图片变得模糊.今天,我将分享三种方法,帮助您提高图片的清晰度. 方法一:使用记灵在线工具 工具地址:记灵在线工具 - 更专注于发现工具的实用性 该工 ...
- OpenCV访问像素的三种方法
三种方法分别问: 指针访问:void colorReduce_ptr(cv::Mat &inputImage, cv::Mat &outputImage, int div); 迭代器访 ...
- Android中图片圆形设置三种方法介绍
Android开发中经常会用到圆形图片,比如在用户头像设置,现在提供三种主要实现方式: 方案一:使用第三方图像框架 Fresco 1.添加依赖 dependencies {compile 'com.f ...
最新文章
- 省市县三级级联(模块化开发)
- 动态获取的图片当做背景,而且图片是小图
- SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输
- sql item_map
- 主成分分析(PCA)——以2维图像为例
- window 之命令行的cd
- kali linux set工具,求助: 社会工程学工具set 出现错误for kali linux.
- Jupyter Notebook 代码补全功能配置
- office未响应(2010、2013……)崩溃
- 简书项目实战-main首页开发
- Linux那些让你虎躯一震的命令
- 【C语言】解决 “address of stack memory associated with local variable ‘num‘ returned”
- JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!
- 码元、符号、波特率、比特率等概念的了解
- ldap + sentry架构的相关结论的验证
- B2B的商务模式主要存在哪些缺点?
- perl和python各自擅长的领域
- 详细的买卖天猫店铺网店转让步骤
- 以太坊学习路线——(二、下)以太坊编程接口:web3.js
- 华为工程师总结的LeetCode刷题笔记提供下载,太优秀了
热门文章
- php 油耗,百公里平均油耗差1L多,一年油费究竟差多少?
- memset 用法 linux,bzero, memset ,setmem 区别
- python新手如何写代码_Python新人指南[2]
- erl命令行的一些基本操作
- 常见手机快充协议介绍
- 电脑不小心删除的文件怎么恢复?
- 用python做数字油画或者从一幅画学习风格,去画另一幅画
- Drone-Mercury 从零开始的四轴无人机制作(二)- 硬件与PCB
- 【3D旋转墙】最简单的3d旋转墙
- putenv() has been disabled for security reasons [srv_status.php:22 → require_once() → ZBase-run() →