OpenCV——颜色缩减、计时函数、访问像素



//颜色空间缩减
//src:源图片
//dst:目标图片
//divideWith:缩减宽度
void ColorSpaceReduction(Mat src,int divideWith,Mat& dst)
{
//创建查询用的表
uchar table[];
for (int i = ; i < ; ++i)
table[i] = divideWith * (i / divideWith);
//创建mat型用于LUT函数查表
Mat lookUpTable(, , CV_8U);
uchar* p = lookUpTable.data;
for (int i = ; i < ; ++i)
p[i] = table[i];
//src是输入dst是输出
LUT(src, lookUpTable, dst); }

double time0 = static_cast<double>(getTickCount());//记录起始时间 time0 = ((double)getTickCount() - time0) / getTickFrequency();
cout << "运行时间为 "<< time0 << "秒"<<endl;//输出运行时间
访问像素的三种方法
【方法1】指针访问,c语言操作符[ ](速度最快,但有越界的风险)
int rowNumber = dst.rows;//行数
int colNumber = dst.cols*dst.channels();//列数*通道数=每一行的元素个数 //循环遍历每个元素
for (int i = ; i < rowNumber; i++)//行循环
{
uchar* data = dst.ptr<uchar>(i);//获取第i行首地址
for (int j=; j < colNumber; j++)//列循环
data[j] = data[j] / div* div+div/;//颜色缩减操作
//也可以写成 *data++=*data/div*div+div/2;
}
【方法2】迭代器iterator(绝对安全,不会越界)

Mat_<Vec3b>::iterator it = dst.begin<Vec3b>();//初始位置的迭代器
Mat_<Vec3b>::iterator itend = dst.end<Vec3b>();//终止位置的迭代器
//彩色图像每个像素有3个通道
for (; it != itend; ++it)
{
(*it)[] = (*it)[] / div * div + div / ;
(*it)[] = (*it)[] / div * div + div / ;
(*it)[] = (*it)[] / div * div + div / ;
}
【方法1】动态地址计算(最慢)
int rowNumber = dst.rows;//行数
int colNumber = dst.cols;//列数
for (int i = ; i < rowNumber; i++)
{
for (int j = ; j < colNumber; j++)
{
//彩色图像每个像素有3个通道
dst.at<Vec3b>(i, j)[] = dst.at<Vec3b>(i, j)[] / div * div + div / ;
dst.at<Vec3b>(i, j)[] = dst.at<Vec3b>(i, j)[] / div * div + div / ;
dst.at<Vec3b>(i, j)[] = dst.at<Vec3b>(i, j)[] / div * div + div / ; }
}

OpenCV——颜色缩减、计时函数、访问像素的更多相关文章
- OpenCV学习笔记(三) 访问像素
转自:OpenCV如何扫描图像.利用查找表和计时 测试代码:opencv\samples\cpp\tutorial_code\core\how_to_scan_images 测试函数耗时 cv::ge ...
- OpenCV(2)-Mat数据结构及访问Mat中像素
Mat数据结构 一开始OpenCV是基于C语言的,在比较早的教材例如<学习OpenCV>中,讲解的存储图像的数据结构还是IplImage,这样需要手动管理内存.现在存储图像的基本数据结构是 ...
- OpenCV(图像处理)—访问像素的三种方法
方法一:用指针访问像素 #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include < ...
- OpenCV探索之路(十七):Mat和IplImage访问像素的方法总结
在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作 ...
- OpenCV创建轨迹条,图片像素的访问
.OpenCV创建进度条以及图像对比度,亮度调整 1.创建轨迹条createTrackbar() 函数原型C++: intcreateTrackbar(conststring& trackba ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?
分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...
- OpenCV 学习之路(2) -- 操作像素
本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...
- 颜色缩减(带Trackbar)【从毛星云Opencv3编程入门P75 P111例程改编】
最近学了点opencv,买了毛星云的书,大力推荐哦. 颜色缩减,自己加了个Trackbar看起来更直观一些. 我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻. 1 ...
随机推荐
- Java - "JUC" Semaphore源码分析
Java多线程系列--“JUC锁”11之 Semaphore信号量的原理和示例 Semaphore简介 Semaphore是一个计数信号量,它的本质是一个"共享锁". 信号量维护了 ...
- 面试中常问的List去重问题,你都答对了吗?
面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固. 我们大家都知道,set集合的特点就是没有重复的元素.如果集合中的数据类型是基本 ...
- Velocity快速入门
Velocity 介绍 Velocity是一个基于java的模板引擎.它允许任何人使用简单但功能强大的模板语言引用Java代码中定义的对象. 当Velocity用于web开发时,web设计人员可以与J ...
- AMD与CMD的异同
AMD与CMD的异同? 1.从官方推荐的写法上面得出: CMD ----- 依赖就近 //CMD define(function(require,exports,module){ var a = re ...
- JavaScript高级编程——Array数组迭代(every()、filter()、foreach()、map()、some(),归并(reduce() 和reduceRight() ))
JavaScript高级编程——Array数组迭代(every().filter().foreach().map().some(),归并(reduce() 和reduceRight() )) < ...
- [基础知识]row类visible使用
使用row的visibe属性,要反向遍历rowset,因为如果正向遍历,rowset是实时变化的,行号是错误的.正确代码如下: Local integer &k; For &k = & ...
- C#版Aliyun DNS API
阿里云解析API,是为域名开发者.注册商.域名代理商等提供的开放和便捷的解析服务接口.API依托于万网云解析服务,可以方便的管理域名和解析记录,让你的解析管理变的随心省时自由舒畅. 一.先附上Aliy ...
- Flutter dart:convert
引用 mport 'dart:convert'; JSON 解码(JSON String->Object) // NOTE: Be sure to use double quotes (&quo ...
- Python Django框架笔记(六):模板
(一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...
- oracle学习之pl/sql使用==转载
PLSQL循序渐进全面学习教程(全):https://blog.csdn.net/spark998/article/details/2065269