OpenCV中,有3种访问每个像素的方法:使用at方法、使用迭代器方法、使用指针

运行如下程序后可以发现使用at方法速度最快。

代码如下:

//操作图像像素
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cstdio>
using namespace std;
using namespace cv; void colorReduce(Mat &a, Mat &b, int div) {//at方法
b = a.clone();
int row = b.rows, col = b.cols;
for(int i = ; i < row; ++i) {
for(int j = ; j < col; ++j) {
b.at<Vec3b>(i, j)[] = b.at<Vec3b>(i, j)[] / div * div + div/;
b.at<Vec3b>(i, j)[] = b.at<Vec3b>(i, j)[] / div * div + div/;
b.at<Vec3b>(i, j)[] = b.at<Vec3b>(i, j)[] / div * div + div/;
}
}
}
void colorReduce1(Mat &a, Mat &b, int div) {//指针
b = a.clone();
int row = b.rows, col = b.cols * b.channels();
uchar *c = b.data;
for(int i = ; i < row; ++i) {
for(int j = ; j < col; ++j) {
*c = *c / div * div + div / ;
c++;
}
}
}
void colorReduce2(Mat &a, Mat &b, int div) {//迭代器
b = a.clone();
Mat_<Vec3b>::iterator it = a.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = a.end<Vec3b>();
Mat_<Vec3b>cimg = b;
Mat_<Vec3b>::iterator itout = cimg.begin();
Mat_<Vec3b>::iterator itoutend = cimg.end();
for(; it != itend; it ++,itout++) {
(*itout)[] = (*it)[]/div * div + div / ;
(*itout)[] = (*it)[]/div * div + div / ;
(*itout)[] = (*it)[]/div * div + div / ;
}
}
int main() {
Mat img, res, temp;
img = imread("PIC1.jpg");
if(!img.data) {cout<<"read image file wrong!"<<endl; getchar(); return ;}
//cout << "height = " << img.size().height << ",width = " << img.size().width << endl;
getchar();
imshow("PIC", img); double t1=(double)getTickCount(); //colorReduce(img, res, 128);//at
colorReduce1(img, res, );//指针
//colorReduce2(img, res, 128);//迭代器 double t2=(double)getTickCount();
double time = (t2-t1)/getTickFrequency()*;
cout<<"Time = " << time << "ms" <<endl; namedWindow("Picture");
imshow("Picture", res); waitKey();
return ;
}

【OpenCV】三种方式操作图像像素的更多相关文章

  1. php三种方式操作mysql数据库

    php可以通过三种方式操作数据库,分别用mysql扩展库,mysqli扩展库,和mysqli的预处理模式分别举案例加以说明 1.通过mysql方式操作数据库 工具类核心代码: <?php cla ...

  2. OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰)

    OpenCV4Android释疑: 透析Android以JNI调OpenCV的三种方式(让OpenCVManager永不困扰) 前文曾详细探讨了关于OpenCV的使用,原本以为天下已太平.但不断有人反 ...

  3. Android 接入 OpenCV库的三种方式

           OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少 ...

  4. Android 使用OpenCV的三种方式(Android Studio)

    http://blog.csdn.net/sbsujjbcy/article/details/49520791 其实最早接触OpenCV是很久很久之前的事了,大概在2013年的5,6月份,当时还是个菜 ...

  5. JDBC的批处理操作三种方式 pstmt.addBatch()

    package lavasoft.jdbctest; import lavasoft.common.DBToolkit; import java.sql.Connection; import java ...

  6. HTML5实现动画三种方式

    编者注:作者以一个运动的小车为例子,讲述了三种实现HTML5动画的方式,思路清晰,动画不仅仅是canvas,还有css3和javascript.通过合理的选择,来实现最优的实现. PS:由于显卡.录制 ...

  7. 监视EntityFramework中的sql流转你需要知道的三种方式Log,SqlServerProfile, EFProfile

    大家在学习entityframework的时候,都知道那linq写的叫一个爽,再也不用区分不同RDMS的sql版本差异了,但是呢,高效率带来了差灵活性,我们 无法控制sql的生成策略,所以必须不要让自 ...

  8. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  9. Linux中设置服务自启动的三种方式

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/e ...

随机推荐

  1. MySQL---1、介绍

    一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.目前MySQL被广泛地应用在Internet上的中小型网站 ...

  2. linux运维工程师成长过程

    原文地址:https://blog.csdn.net/kwame211/article/details/78059331 初级篇 linux运维人员常用工具拓扑详见: 1rsync工具 很多地方经常会 ...

  3. Docker学习(二): 镜像的使用与构建

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  4. freemarker学习笔记

    在模板中定义的变量有三种类型: 引用 1:plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换. 2:局部变量:在宏定义体中有效,使用loca ...

  5. memcache 学习笔记

    Memcached是国外社区网站LiveJournal的开发团队开发的高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度.提高可扩展 ...

  6. 搭建和启动javaWeb项目

    首先,我们得配置服务器,我的demo采用tomcat 你只要找到tomcat的home路径就好了,后面会自动给你提示的

  7. python(九):迭代器与生成器

    一.Python的迭代协议 迭代器是访问集合内元素的一种方式.它只能依次访问集合内元素.其特点是惰性执行. collection.abc的迭代协议提供了两个概念:可迭代对象和迭代器.可迭代对象:必须具 ...

  8. 小工具-IP地址获取和设置及端口访问验证(windows)

    技术部在业务部门眼里就是后勤部门,业务部门要搬到新大楼去 领导要求去帮忙调试业务人员的电脑,要保证这些大爷们周一上班来,就喝着茶打开新浪,然后打开OA看看. 手上就几个桌面支持的兄弟,要弄一百台多电脑 ...

  9. HDU P2222 Keywords Search

    In the modern time, Search engine came into the life of everybody like Google, Baidu, etc.Wiskey als ...

  10. BZOJ1812: [Ioi2005]riv(树形dp)

    题意 题目链接 Sol 首先一个很显然的思路是直接用\(f[i][j] / g[i][j]\)表示\(i\)的子树中选了\(j\)个节点,该节点是否选的最小权值.但是直接这样然后按照树形背包的套路转移 ...