访问图像中的像素

访问图像像素有三种可行的方法
方法一:指针访问
指针访问访问的速度最快,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. (转载)JAVA中八种基本数据类型的默认值

    原文链接: http://simon-c.iteye.com/blog/1016031 引用 For type byte, the default value is zero, that is, th ...

  2. HDOJ 2209 贪心

    翻纸牌游戏 Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  3. asp.net core新特性(1):TagHelper

    进步,才是人应该有的现象.-- 雨果 今天开始,我就来说说asp.net core的新特性,今天就说说TagHelper标签助手.虽然学习.net,最有帮助的就是microsoft的官方说明文档了,里 ...

  4. 互联网级监控系统必备-时序数据库之Influxdb

    时间序列数据库,简称时序数据库,Time Series Database,一个全新的领域,最大的特点就是每个条数据都带有Time列. 时序数据库到底能用到什么业务场景,答案是:监控系统. Baidu一 ...

  5. Spring3中@Value注解的使用

    Spring可以通过@Value注解来直接获取properties文件里面配置的值. 1. 首先要在spring的配置文件中指明properties文件的位置: <context:propert ...

  6. JavaScript一个拖动元素的实例

    <script type="text/javascript" src="./whenReady.js"></script> <bo ...

  7. java在控制台输出空心正方形,菱形,空心菱形

     使用for和if打印一个空心正方形 /*思路:要想打印一个5x5的空心正方形,首先它的第一横行和最后一行都是填满的,需要全部遍历出来,第二三四行和只有左右两条边是出来的,中间部分为空的.因此在打印第 ...

  8. poj_3258:River Hopscotch(二分)

    题目链接 L为N+2块石子中最右边石子位置,0最左,M为可移除块数,求移除后相邻石子可达到的最大距离. #include<iostream> #include<cstdio> ...

  9. web前端开发面试题(未完待续)

    一.HTML与XHTML的不同:1)XHTML元素必须被正确地嵌套 2)元素必须被关闭   如:<h1>--</h1>关闭 3)标签名必须用小写字母 4)XHTML文档必须有根 ...

  10. C#小爬虫,通过URL进行模拟发送接收数据

    public async Task<string> SendDataAsync(HttpMethod httpMethod, string requestUrl, HttpContent ...