访问图像中的像素

访问图像像素有三种可行的方法
方法一:指针访问
指针访问访问的速度最快,Mat类可以通过ptr函数得到图像任意一行的首地址,
同时,Mat类的一些属性也可以用到公有属性 rows和cols 表示行和列
通道数可以通过channels()函数获得;
void visitPix1()
{
Mat srcImg = imread("jpg/1.jpeg");
Mat dstImg;
srcImg.copyTo(dstImg);
int rowNum = dstImg.rows;
int colNum = dstImg.cols*dstImg.channels();
for(int row = 0;row<rowNum;row++)
{
uchar* data = srcImg.ptr<uchar>(row);
for(int col = 0;col<colNum;col++)
{
data[col]+=23;
}
}
imshow("src",srcImg);
imshow("dst",dstImg);
waitKey();
}
方法二:迭代器访问
通过迭代器访问像素。可以获得begin和end 然后只需要从begin迭代到end就可以 用×操作符取得地址内容

void visitPix1()
{
Mat srcImg = imread("jpg/1.jpeg");
Mat dstImg;
srcImg.copyTo(dstImg);
Mat_<Vec3b>::iterator begin = dstImg.begin<Vec3b>();
Mat_<Vec3b>::iterator end = dstImg.end<Vec3b>();
for(Mat_<Vec3b>::iterator it = begin;it!=end;it++)
{
(*it)[0] += 12;
(*it)[1] +=13;
(*it)[2] +=14;
}
imshow("src",srcImg);
imshow("dst",dstImg);
waitKey();
}
方法三:动态地址计算
这里可以介绍一个at方法,at(int y,int x)可以用来存取图像,但是需要数据类型的转换
img.at<Vec3b>(j,i)[channel] = value;
void visitPix3()
{ Mat srcImg = imread("jpg/1.jpeg");
Mat dstImg;
srcImg.copyTo(dstImg);
int rowNum = dstImg.rows;
int colNum = dstImg.cols*dstImg.channels();
for(int row = 0;row<rowNum;row++)
{
for(int col = 0;col<colNum;col++)
{
dstImg.at<Vec3b>(row,col)[0] +=23;
dstImg.at<Vec3b>(row,col)[1] +=23;
dstImg.at<Vec3b>(row,col)[2] +=23;
}

}
imshow("src",srcImg);
imshow("dst",dstImg);
waitKey();

}

另外添加一个函数

计时函数

opencv 中有两个可以计时的函数 getTickCount 和 getTickFrequency
getTickCount 函数返回cpu自某个事件以来走过的时钟周期数
getTickFrequency 函数返回cpu 一秒钟所走的时钟周期数,

例子
void timeTest()
{
double time0 = static_cast<double>(getTickCount());
for(int i =0;i<100000;i++){}
time0 = (double)(getTickCount()-time0)/getTickFrequency();
cout<<"run time"<<time0<<"sec"<<endl;
}

opencv 访问图像像素的三种方式的更多相关文章

  1. Struts2访问Servlet API的三种方式

    有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...

  2. TensorFlow中读取图像数据的三种方式

    本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...

  3. SpringMVC访问静态资源的三种方式(转)

    本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...

  4. 转转转!SpringMVC访问静态资源的三种方式

    如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  5. 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  6. SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  7. 【转】SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  8. 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】

    首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...

  9. opencv之访问图像像素

    访问像素的三种方法 ①指针访问:最快 ②迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 ③动态地址计算:更慢,通过at()实现.适用于访问具体某个第i行,j列的像素,而不适用遍历像素 ...

随机推荐

  1. Socket实现-Socket I/O

    Socket层的核心是两个函数:sosend()和soreceive().这两个函数负责处理所有Socket层和协议层之间的I/O操作. select()系统调用的作用是监控文件描述符的状态.一般用于 ...

  2. Git恢复指定文件

    Git恢复指定文件 修改这个文件的commit有哪些? git log -- <文件路径> 猜测需要还原的commit. 这个文件作了哪些更改? git diff <需要还原的com ...

  3. Vulkan Tutorial 25 Images

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Introduction 到目前为止,几何图形使用每个顶点颜色进行着色处理,这是一个 ...

  4. 关于Net开发中一些SQLServer性能优化的建议

    一. ExecuteNonQuery和ExecuteScalar 对数据的更新不需要返回结果集,建议使用ExecuteNonQuery.由于不返回结果集可省掉网络数据传输.它仅仅返回受影响的行数.如果 ...

  5. 掌握好这23个Linux命令常用项

    运维工程师(Operations)在国内又称为运维开发工程师(Devops),在国外称为 SRE(SiteReliability Engineering).负责维护并确保整个服务的高可用性,同时不断优 ...

  6. POJ 2251 三维BFS(基础题)

    Dungeon Master Description You are trapped in a 3D dungeon and need to find the quickest way out! Th ...

  7. ArrayList和LinkedList源码

    1 ArrayList 1.1 父类 java.lang.Object 继承者 java.util.AbstractCollection<E> 继承者 java.util.Abstract ...

  8. Hadoop hdfs上传文件 权限问题

    问题描述: hadoop在虚拟机中的linux系统下 在本地通过eclipse编写代码把本地文件上传至hadoop平台的指定目录 代码如下: @Test public void upload() th ...

  9. linux函数的阻塞与非阻塞IO及错误处理

    1.阻塞是指进程等待某一个事件的发生而处于等待状态不往下执行,如果等待的事件发生了则会继续执行该进程.调用系统阻塞函数可能会导致进程阻塞进入睡眠状态. 2.阻塞IO之read读取键盘输入数据 3.li ...

  10. 走进安卓的重灾区----video

    html5的video已经出来很久了.在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差.这几天搞了安卓的兼容,简直是要吐血.所以特意总结了一些强势的坑点. 先看一下常用的一些属性 ...