//颜色空间缩减
//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. java 实现多重继承

    java提高篇(九)-----实现多重继承 接口 多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要 ...

  2. 漫画 | Java多线程与并发(一)

    1.什么是线程? 2.线程和进程有什么区别? 3.如何在Java中实现线程? 4.Java关键字volatile与synchronized作用与区别? volatile修饰的变量不保留拷贝,直接访问主 ...

  3. VS C#文件的复制

    /// <summary> /// 复制目录 /// </summary> /// <param name="OldDirectoryPath"> ...

  4. 一些css属性的理解和运用。

    1,弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器 常用flex来编写盒子横向分布; 一: flex-direction flex-directi ...

  5. 【读书笔记】iOS-网络-保护网络传输

    一,验证服务器通信. 二,HTTP认证. 手机银行应用有两种认证模式:标准验证与快速验证.标准验证只是提示用户输入用户名与密码,而快速验证则让用户注册设备,然后使用PIN进行验证,每次验证时无需用户名 ...

  6. Django中Ajax提交数据的CSRF问题

    错误信息: Forbidden (CSRF token missing or incorrect.): 什么是CSRF: django为用户实现防止跨站请求伪造的功能,通过中间件 django.mid ...

  7. JavaSE——多线程

    进程和线程: 进程是指运行中的应用程序,每一个进程都有自己独立的内存空间.一个应用程序可以启动多个进程. 线程是指进程中的一个执行流程,有时也称为执行情景. 线程和进程的主要区别在于:每个进程都需要操 ...

  8. SD从零开始09-10

    SD从零开始9 数据流(Data Flow) 根据参考创建Create with reference 可以参考之前的凭证来创建销售凭证,可以在初始画面,也可以在凭证处理过程中,通过uniform. d ...

  9. ArcGIS JavaScript API 4.x中热度图渲染的使用注意事项

    要使用ArcGIS JavaScript API 4.x的热度图渲染器来渲染要素图层,需要注意几点前提条件: 1.需要使用ArcGIS Server 10.6.1或更高版本发布GIS服务. 2.只支持 ...

  10. 自定义适用于手机和平板电脑的 Dynamics 365(三):显示的实体

    您可以启用 适用于手机的 Dynamics 365 和 适用于平板电脑的 Dynamics 365 的有限实体集. 若要查看是否启用了实体,或者要启用实体,请单击“设置”>“自定义”>“自 ...