opencv 访问图像像素的三种方式
访问图像中的像素
访问图像像素有三种可行的方法
方法一:指针访问
指针访问访问的速度最快,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 访问图像像素的三种方式的更多相关文章
- Struts2访问Servlet API的三种方式
有时我们需要用到Request, Response, Session,Page, ServletContext这些我们以前常用的对象,那么在Struts2中怎么样使用到这些对象呢,通常有三种方式. * ...
- TensorFlow中读取图像数据的三种方式
本文面对三种常常遇到的情况,总结三种读取数据的方式,分别用于处理单张图片.大量图片,和TFRecorder读取方式.并且还补充了功能相近的tf函数. 1.处理单张图片 我们训练完模型之后,常常要用图片 ...
- SpringMVC访问静态资源的三种方式(转)
本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...
- 转转转!SpringMVC访问静态资源的三种方式
如果你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- SpringMVC访问静态资源的三种方式
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- 【转】SpringMVC访问静态资源的三种方式
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- 【spring Boot】spring boot获取资源文件的三种方式【两种情况下】
首先声明一点,springboot获取资源文件,需要看是 1>从spring boot默认的application.properties资源文件中获取 2>还是从自定义的资源文件中获取 带 ...
- opencv之访问图像像素
访问像素的三种方法 ①指针访问:最快 ②迭代器iterator:较慢,非常安全,指针访问可能出现越界问题 ③动态地址计算:更慢,通过at()实现.适用于访问具体某个第i行,j列的像素,而不适用遍历像素 ...
随机推荐
- Command "python setup.py egg_info" failed with error code 10
1:今天系统重装以后,下载了新的版本的python3.6.1.然后想通过pycurl模块测试URL,突然发现windows10下我无法通过pip安装pycurl模块了,报错内容如下 Collectin ...
- win10常用的运行命令
WIN+R调出命令框: 1.calc:启动计算器 2.appwiz.cpl:程序和功能 3.certmgr.msc:证书管理实用程序 4.charmap:启动字符映射表 5.chkdsk.exe:Ch ...
- 部署服务能在Dynamics CRM Online上使用吗?
部署服务有些时候有用,改动一些参数不需要重启IIS,也不需要去数据库中更改.比如,系统默认设置一个仪表盘(Dashboard)最多6个组件,不能超过这个数量,通过部署服务是可以更改的.部署服务既可以通 ...
- [LeetCode] Wildcard Matching 题解
6. Wildcard Matching 题目 Implement wildcard pattern matching with support for '?' and '*'. '?' Matche ...
- 包装类、数组、string类浅析及练习
String s1 = "abc"; String s2 = "abc"; System.out.println(s1==s2); //返回true Strin ...
- 在Jekyll博客添加评论系统:gitment篇
最近在Github Pages上使用Jekyll搭建了个人博客( jacobpan3g.github.io/cn ), 当需要添加评论系统时,找了一下国内的几个第三方评论系统,如"多说&qu ...
- jvm003 类加载的过程
类加载的过程 一.加载 在加载阶段虚拟机需要完成以下三件事: 通过一个类的全限定名称来获取此类的二进制字节流 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类的 ...
- Django学习(九)---Templates过滤器及Django shell和Admin增强
一.Templates过滤器 过滤器属于django模板语言 修改模板中的变量,从而显示不同内容 {{ value | filter }} 举例:{{ list_nums | length}} ...
- Ambari 2.4.2 汉化
1.ambari-web (1)apache-ambari-2.4.2-src/ambari-web/app/messages.js 该文件是KeyValue文件,3000多行.将Value部分翻译成 ...
- [C++]智能指针的实现与使用
智能指针 智能指针是当我们在使用对象时,有时会把对象的内存分配在堆上忘记释放,导致内存泄露,并且当多个指针共享同一个对象的内存时,容易出现重复释放内存,导致错误. 我们针对所需要共享的对象,手动完成一 ...