访问图像中的像素

访问图像像素有三种可行的方法
方法一:指针访问
指针访问访问的速度最快,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. Python 迭代器和列表解析

    Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...

  2. 使用JDK自带的MessageDigest计算消息摘要

    使用JDK自带的MessageDigest计算消息摘要 上代码 /** * 使用JDK自带MessageDigest */ public class MessageDigestUtils { /** ...

  3. centos 7 部署Thinksns

    因为Thinksns是PHP项目,我们这里部署需要搭建Apache+mysql+php环境. 1.mysql的安装,这里使用yum安装可以解决很多依赖包的问题.由于centos 7 没有自带mysql ...

  4. Tomcat学习笔记(一)一个简单的Web服务器

    内容为<深入剖析Tomcat>第一章重点,以及自己的总结,如有描述不清的,可查看原书. 一.HTTP协议: 1.定义:用于服务器与客户端的通讯的协议,允许web服务器和浏览器通过互联网进行 ...

  5. usaco 2002 月赛 Chores 题解

    Description Farmer John's family pitches in with the chores during milking, doing all the chores as ...

  6. Oracle trunc()函数的用法--来着心静禅定ing

    1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指 ...

  7. CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划)

    CJOJ 1644 编辑距离 / Luogu 2758 编辑距离(动态规划) Description 字符串是数据结构和计算机语言里很重要的数据类型,在计算机语言中,对于字符串我们有很多的操作定义,因 ...

  8. Xamarin Android绑定微信SDK

    现在几乎所有的APP都集成了向微博,微信等社交平台分享的功能.这些社交平台官方也提供了SDK让开发者使用,对于Android和IOS平台而言,只需要下载官方的SDK,按照官方说明文档进行集成就可以轻松 ...

  9. Spring定时器实现(一)

    Spring定时器简单应用实现,如下: 首先.Spring配置文件: <?xml version="1.0" encoding="UTF-8"?> ...

  10. iOS开发中frame与bounds的区别

    闲话不多说,先上两张图,大伙们就已经明白了: 显示出来的效果是这样子滴:  总结: 要理清这两者的区别,最主要的要理解一下几个概念:frame可以理解为可视的范围,而bounds可以理解为可视范围内的 ...