//颜色空间缩减
//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——颜色缩减、计时函数、访问像素的更多相关文章

  1. OpenCV学习笔记(三) 访问像素

    转自:OpenCV如何扫描图像.利用查找表和计时 测试代码:opencv\samples\cpp\tutorial_code\core\how_to_scan_images 测试函数耗时 cv::ge ...

  2. OpenCV(2)-Mat数据结构及访问Mat中像素

    Mat数据结构 一开始OpenCV是基于C语言的,在比较早的教材例如<学习OpenCV>中,讲解的存储图像的数据结构还是IplImage,这样需要手动管理内存.现在存储图像的基本数据结构是 ...

  3. OpenCV(图像处理)—访问像素的三种方法

    方法一:用指针访问像素 #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include < ...

  4. OpenCV探索之路(十七):Mat和IplImage访问像素的方法总结

    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作 ...

  5. OpenCV创建轨迹条,图片像素的访问

    .OpenCV创建进度条以及图像对比度,亮度调整 1.创建轨迹条createTrackbar() 函数原型C++: intcreateTrackbar(conststring& trackba ...

  6. 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整

    今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...

  7. 怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

      分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.b ...

  8. OpenCV 学习之路(2) -- 操作像素

    本节内容: 访问像素值 用指针扫描图像 用迭代器扫描图像 编写高效的图像扫描循环 扫描图像并访问相邻像素 实现简单的图像运算 图像重映射 访问像素值 准备工作: 创建一个简单函数,用它在图像中加入椒盐 ...

  9. 颜色缩减(带Trackbar)【从毛星云Opencv3编程入门P75 P111例程改编】

    最近学了点opencv,买了毛星云的书,大力推荐哦. 颜色缩减,自己加了个Trackbar看起来更直观一些. 我一般自己先看一遍程序,脑子里有个大概印象了,再自己写一遍,这样出了错误会印象更深刻. 1 ...

随机推荐

  1. 把多个js函数绑定到onload时间处理函数上

    js的window.onload=function();网页加载完毕时会触发一个onload事件,这个事件与window对象相关联,是让一个函数在网页加载完毕之后得到执行.但是如果有两个韩式first ...

  2. HDU4162(最小循环表示)

    Shape Number Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. java队列Queue及阻塞队列

    java队列 接口Queue类在java.util包,定义了以下6个方法 详细查看官方文档https://docs.oracle.com/javase/7/docs/api/java/util/Que ...

  4. lamp配置多个虚拟站点

    在同一ip下添加多个域名站点! 1.查看ip 命令:ifconfig 2.添加域名 命令:vi /etc/hosts 输入域名:如 192.168.160.127   www.test.com 192 ...

  5. CSS隐藏多余的文字

    效果: <p><strong>商品名称:</strong>新鲜现摘云南绥江半边红李子甜脆脱骨李6斤当季绿色有机水果包邮</p></div> ...

  6. 排错-Error--memory violation  Exception ACCESS_VIOLATION received解决方

    Error -- memory violation : Exception ACCESS_VIOLATION received   by:授客 QQ:1033553122 测试代码: Action() ...

  7. 实现网络数据提取你需要哪些java知识

    本篇对一些常用的java知识做一个整合,三大特性.IO操作.线程处理.类集处理,目的在于能用这些只是实现一个网页爬虫的功能. Ⅰ 首先对于一个java开发的项目有一个整体性的了解认知,项目开发流程: ...

  8. C语言中数据类型的本质

    数据类型可以理解为固定内存大小的别名.比如int类型,就是表示占用4字节的内存. 1 数据类型的大小 用sizeof操作符获得数据类型的大小. 比如 int a[5];   sizeof(a)就可以得 ...

  9. Unity Profiler连接Android真机调试

    Profiler在Editor模式就可以观看性能消耗,但是毕竟电脑配置高,跟手机真机环境还是有区别.实际开发中的优化还是推荐用真机测试. 因为IOS一般比Android手机的配置高,在Android平 ...

  10. jqgrid 使用altRows和altclass属性实现隔行换色

    如果只是简单的区别奇偶行的话,设置两个属性,加一个样式 altRows:true, altclass:'someClass' .someClass { background-color: #DDDDD ...