opencv 3.1.0 访问像素值的三种方法(C++)
三种方法分别问:
指针访问: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++)的更多相关文章
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- struts2的action访问servlet API的三种方法
学IT技术,就是要学习... 今天无聊看看struts2,发现struts2的action访问servlet API的三种方法: 1.Struts2提供的ActionContext类 Object g ...
- Action访问Servlet API的三种方法
一.为什么要访问Servlet API ? Struts2的Action并未与Servlet API进行耦合,这是Struts2 的一个改良,从而方便了单独对Action进行测试.但是对于Web控制器 ...
- Mybatis+Mysql插入数据库返回自增主键id值的三种方法
一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法: ...
- RHEL7.0 配置网络IP的三种方法
导读 RHEL7里面的网卡命名方式从eth0,1,2的方式变成了enoXXXXX的格式. en代表的是enthernet (以太网),o 代表的是onboard (内置),那一串数字是主板的某种索引编 ...
- 在JS方法中返回多个值的三种方法
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...
- 在JS方法中返回多个值的三种方法(转载)
来源:https://www.cnblogs.com/gxsyj/p/6004574.html 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数 ...
- Javascript获取value值的三种方法及注意点
JavaScript获取value值,主要有以下三种: 1.用document.getElementById(“id名”).value来获取(例1): 2.通过form表单中的id名或者name名来获 ...
- JS判断一个数组中是否有重复值的三种方法
方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ...
随机推荐
- SSM登陆注册
package com.coingod.controller; import java.io.IOException;import java.io.PrintWriter;import java.ut ...
- Eureka服务注册中心
Eureka服务注册中心 最近在研究Spring Cloud,发现其中的组件实在是太多了,真的是头大,只能一块一块看,像盲人摸象一样.要想很短时间内掌握Spring Cloud是不可能的,小编就学习一 ...
- springboot启动报错
新建springboot整合aop记录web日志的过程中启动失败 错误如下: ***************************APPLICATION FAILED TO START******* ...
- java之设计模式工厂三兄弟之抽象工厂模式
[学习难度:★★★★☆,使用频率:★★★★★] 工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工 ...
- 机器学习基石:Homework #0 SVD相关&常用矩阵求导公式
- PyQT5 helloworld教程(转载)
转载节选自该博客地址:http://blog.csdn.net/u013401853/article/details/54581512,博主的步骤写的很详细,感谢! QT Creator安装 因为我们 ...
- Discuz! 7.x 反射型xss
引用:http://wooyun.jozxing.cc/static/bugs/wooyun-2014-084097.html 在/include/global.func.php 文件中 第1036- ...
- [Awson原创]修水渠(canal)
Description Awson是某国际学校信竞组的一只菜鸡.他们班主任F老师喜欢带他们去爬爬唷喽山.登顶后,Awson有了个奇怪的发现. 山腰上有N(1<=N<=100)个村庄,这些村 ...
- ●CodeForces 429D Trick_Function
题链: http://codeforces.com/problemset/problem/429/D题解: 分治,最近点对 不难发现g(i,j)=sum[j]-sum[i], 那么f(i,j)=(i- ...
- CSAPP-过程调用,数据存储,缓冲区溢出
程序编译: 1.预处理阶段: 1.文件包含:将#include扩展成文件正文 2.条件编译:根据#if和#ifdef将程序的某部分排除或者包含 3.宏展开:将出现宏引用的地方展开成相应的宏 2.编译阶 ...