#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. KBMMW 4.82.00 发布

    作者最近加紧了更新进度,赞一个. 时间都去哪儿了? 还没好好看4.81, 新版就来了. 这个版本主要是增强日志管理,已经强大到替换delphi 本身的异常处理了. We are happy to an ...

  2. java如何实现以数据流的形式下载压缩包到本地?

    先不多说,直接贴代码吧,在服务器的E盘下放一个E:/manual.rar的压缩包 package com.cellstrain.icell.controller; import org.springf ...

  3. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)

    传送门 可以发现需要维护连通性和两点连通时间. 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间. 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按si ...

  4. hdu-1142(记忆化搜索+dij)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142 思路:1.不是求最短路径,而是求如果两个点A,B直接相连,且A到终点的距离大于B到终点的距离,求 ...

  5. 按条件设置gridcontrol 单元格属性

    等价代码设置:(注意这里使用都是FieldName, 即绑定对象的字段名) var cn = new StyleFormatCondition(FormatConditionEnum.Expressi ...

  6. 20155320 2016-2017-2 《Java程序设计》第五周学习总结

    20155320 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 错误处理 java中所有错误都会被打包为对象,可以通过try catch 代表错误的对象后做 ...

  7. 好久不发帖,转一下公司技术美术独立完成的U3D模拟暗黑泰瑞尔翅膀物理运动效果

    想入公司倍培养成为优秀的技术型美术,欢迎call我! Max制作翅膀模型部分 新建一个片面,模型给一些段数,赋予一张左右二方连续贴图. 加个FFD 4*4*4,并稍微拉出一点弧度. 将头尾的Alpha ...

  8. SMINT:单页网站的免費jQuery插件

    最近为了做一个静态网页版的数据报告,不希望花很多时间去设计网页,或者花时间去调整布局,于是找到了一个名为Smint的免費jQuery插件.几乎不需要写什么代码就可以完成一个一页式网站.这非常适合用来制 ...

  9. CUDA开发 - CUDA 版本

    "CUDA runtime is insufficient with CUDA driver"CUDA 9.2: 396.xx CUDA 9.1: 387.xx CUDA 9.0: ...

  10. JS——图片预览功能

    <script type="text/javascript">    function DisplayImage(fileTag) {        document. ...