#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std; // 记录时间信息
void PrintMs(const char *text = "")
{
static long long last = ;
long long cur = getTickCount();
if (last == )
{
last = cur;
return;
}
long long ms = ;
ms = ((double)(cur - last) / getTickFrequency()) * ;
if (*text != )
{
printf("%s = %dms\n", text,ms);
}
last = getTickCount();
}
int main(int argc, char *argv[])
{
Mat mat(, , CV_8UC3);
//mat.create(3000, 4000, CV_8UC3);
//元素大小字节数
int es = mat.elemSize();
int size = mat.rows*mat.cols*es; //地址遍历连续的Mat
PrintMs();
for (int i = ; i < size; i += es)
{
mat.data[i] = ; //B
mat.data[i + ] = ;//G
mat.data[i + ] = ;//R
}
PrintMs("mat.data ms"); //地址遍历不一定连续的Mat
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
(&mat.data[row*mat.step])[col*es] = ;//B
(&mat.data[row*mat.step])[col*es+] = ;//G
(&mat.data[row*mat.step])[col*es+] = ;//R
}
}
PrintMs("mat.step ms"); //使用ptr遍历Mat
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
Vec3b *c = mat.ptr<Vec3b>(row, col);
c->val[] = ; //B
c->val[] = ; //G
c->val[] = ; //R
}
}
PrintMs("mat.ptr ");
try
{
//使用at来遍历
for (int row = ; row < mat.rows; row++)
{
for (int col = ; col < mat.cols; col++)
{
Vec3b &m = mat.at<Vec3b>(row, col);
m[] = ;
m[] = ;
m[] = ;
}
}
PrintMs("mat.at");
}
catch (Exception &ex)
{
cout << ex.what() << endl;
} //通过迭代器来遍历
PrintMs("");
auto it = mat.begin<Vec3b>();
auto it_end = mat.end<Vec3b>();
for (; it != it_end; it++)
{
(*it).val[] = ; //B
(*it).val[] = ; //G
(*it).val[] = ; //R
}
PrintMs("mat.itr"); namedWindow("mat");
imshow("mat", mat);
waitKey(); return ;
}

Opencv --- 图像像素遍历的各种方法的更多相关文章

  1. opencv图像像素值读取

    说到图像像素,肯定要先认识一下图像中的坐标系长什么样. 1. 坐标体系中的零点坐标为图片的左上角,X轴为图像矩形的上面那条水平线:Y轴为图像矩形左边的那条垂直线.该坐标体系在诸如结构体Mat,Rect ...

  2. bitmap的图像像素遍历方法

    public class FastBitmap { BitmapData bitmapData; public FastBitmap(Bitmap bitmap) { ,,bitmap.Width,b ...

  3. opencv图像阈值设置的三种方法

    1.简单阈值设置   像素值高于阈值时,给这个像素赋予一个新值(可能是白色),否则我们给它赋予另外一种颜色(也许是黑色).这个函数就是 cv2.threshhold().这个函数的第一个参数就是原图像 ...

  4. OpenCv图像像素操作

    1:像素 有两种直接操作像素点的方法: 第一种: 将其转化为numpy.array格式,直接进行操作. 第二种:使用Opencv提供的Get1D,Get2D等函数. 2:获取行和列像素 有一下四个函数 ...

  5. opencv 访问图像像素的三种方式

    访问图像中的像素 访问图像像素有三种可行的方法方法一:指针访问指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,同时,Mat类的一些属性也可以用到公有属性 rows和cols ...

  6. opencv——图像遍历以及像素操作

    摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 补充: 图像变换可以看成 像素变换--点 ...

  7. Opencv中图像的遍历与像素操作

    Opencv中图像的遍历与像素操作 OpenCV中表示图像的数据结构是cv::Mat,Mat对象本质上是一个由数值组成的矩阵.矩阵的每一个元素代表一个像素,对于灰度图像,像素是由8位无符号数来表示(0 ...

  8. OpenCV成长之路(2):图像的遍历

    我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方 ...

  9. Mat中两种像素遍历方法比较

    小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...

随机推荐

  1. 构造函数constructor 与析构函数destructor(四)

    拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X ...

  2. python的基础操作2

    一 字符串格式化 占位符 %s和%d %s是属于字符串的占位符,而%d是属于数字类型的占位符 #占位符 %s %d # a="我叫%s,年龄%d,就是一个%s"%("al ...

  3. oss上传文件夹-cloud2-泽优软件

    泽优软件云存储上传控件(cloud2)支持上传整个文件夹,并在云空间中保留文件夹的层级结构,同时在数据库中也写入层级结构信息.文件与文件夹层级结构关系通过id,pid字段关联. 本地文件夹结构 文件 ...

  4. OpenGL ES 光照模型之——漫反射光(RenderMonkey测试,地球日出效果)

    概述及目录(版权所有,请勿转载 http://www.cnblogs.com/feng-sc) 本文在上一篇(OpenGL ES 光照模型之——环境光照(RenderMonkey测试))环境光基础上, ...

  5. 配置好Nginx后,通过flume收集日志到hdfs(记得生成本地log时,不要生成一个文件,)

    生成本地log最好生成多个文件放在一个文件夹里,特别多的时候一个小时一个文件 配置好Nginx后,通过flume收集日志到hdfs 可参考flume的文件 用flume的案例二 执行的注意点 avro ...

  6. SPOJ10606 BALNUM - Balanced Numbers(数位DP+状压)

    Balanced numbers have been used by mathematicians for centuries. A positive integer is considered a ...

  7. How Many Tables HDOJ

    How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. eclipse 安装

    做一个项目,需要搭建环境.使用sql server 2005,tomcat,eclipse.过程真复杂,碰到些小问题,不过都解决了,还算顺利. win7下sql server 2005安装:http: ...

  9. java虚拟机加载系统环境变量到内存中

    JVM在启动的时候,会将环境变量,转换到 系统属性 里面.可以通过System.getProperty("");来获取.catalina.home属性,就是运行tomcat的JVM ...

  10. 结对编程-四则运算生成器(java实现)

     结对伙伴:陈振华  项目要求 1.题目:实现一个自动生成小学四则运算题目的命令行程序. 2.需求: 1. 使用 -n 参数控制生成题目的个数 2. 使用 -r 参数控制题目中数值(自然数.真分数和真 ...