1、利用 at 函数读取

(1)单通道图像读取方式

Mat img1 = imread(filename,IMREAD_GRAYSCALE);
for( size_t nrow = 0; nrow < img1.rows; nrow++)
{
for(size_t ncol = 0; ncol < img1.cols; ncol++)
{
uchar val = mat_CV_8UC1.at<uchar>(nrow,ncol);
}
}

(2) 三通道图像读取方式

Mat img2 = imread(filename,IMREAD_COLOR);
for( size_t nrow = 0; nrow < img2.rows; nrow++)
{
for(size_t ncol = 0; ncol < img2.cols; ncol++)
{
Vec3i bgr = mat_CV_8UC3.at<Vec3b>(nrow,ncol);//用Vec3b也行
cout << "("<<bgr.val[0]<<","
<<bgr.val[1]<<","
<<bgr.val[2]<<")";
}
cout << endl;
}

2、使用指针读取

for( size_t nrow = 0; nrow < img3.rows; nrow++)
{
uchar* data = img3.ptr<uchar>(nrow);
for(size_t ncol = 0; ncol < img3.cols * img3.channels(); ncol++)
{
cout << int( data[ncol] ) ;
}
cout << endl;
}

3、使用迭代器

Mat img4 = imread(filename,IMREAD_GRAYSCALE);
MatIterator_<uchar> it = img4.begin<uchar>(), it_end = img4.end<uchar>();
for(int cnt = 1; it != it_end; ++it)
{
cout << ( int(*it) ) ;
if( (cnt++ % img4.cols) ==0 )
cout << endl;
}

4、使用矩阵元素的地址定位知识

Mat img5(rows, cols,CV_8U, Scalar(0));
for( size_t nrow = 0; nrow < img5.rows; nrow++)
for(size_t ncol = 0; ncol < img5.cols; ncol++)
{
cout<<(int)(*(img5.data+img5.step[0]*nrow+img5.step[1]*ncol));
}
5、补充:在使用 at 函数的情况下需要预先知道Mat变量中存储的元素类型,如果类型不匹配就会出现读错误。所以可以采用c++  boost库中的BOOST_TYPEOF来获取图像的元素数据类型。例:
Mat img6 = imread(filename);
typedef BOOST_TYPEOF(*img6.data) ElementType
for( size_t nrow = 0; nrow < img1.rows; nrow++)
{
for(size_t ncol = 0; ncol < img1.cols; ncol++)
{
cout<<mat_CV_8UC1.at<ElementType>(nrow,ncol);
}
}

翻译

搜索

复制

Opencv 中 Mat中元素的值读取方法总结的更多相关文章

  1. 输出有序数组的中两个元素差值为指定值diff的两个元素

    题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...

  2. jquery中修改一个元素的值或内容

    jquery中修改一个元素的值或内容,比如数值增加可以使用这个方法取得原值并+1 $this.text(function(i,ot){return Number(ot)+1;});

  3. 【opencv基础】OpenCV从Mat中提取某些行或列

    这两个函数返回的是指向原矩阵内部位置的指针,类似于浅拷贝: code cv::Mat align_mean(cv::Mat mean, cv::Rect facebox, float scaling_ ...

  4. form表单元素中disabled的元素的值不会提交到服务器

    1.表单元素中disabled的元素的值不会提交到服务器,后台获取的值为null <form id="myForm" action="#" method= ...

  5. python中删除某个元素的3种方法

    python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...

  6. js中常用追加元素的几种方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. (转)OpenCV 访问Mat中每个像素的值

    转自:http://blog.csdn.net/xiaowei_cqu/article/details/19839019 在<OpenCV 2 Computer Vision Applicati ...

  8. 遍历查找集合或者数组中的某个元素的值 java代码 详解 Android开发

    import java.util.Scanner; public class Test21 { public static void main(String[] args) { //定义并初始化数组 ...

  9. JavaScript获取table中某一列的值的方法

    1.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  10. Java之——删除ArrayList中的反复元素的2种方法

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...

随机推荐

  1. Java面试题(持续更新中...)

    事务的四大特性 原子性,隔离性,持久性,一致性 事务的隔离级别和现象 读未提交:可能产生脏读,读取到未提交的数据 读已提交:可能产生不可重复读取问题,A事务中读取到B事务已提交的数据,导致两次读取数据 ...

  2. 中国移动基于 Kubernetes 的物联网边缘计算应用实践

    作者:何毓川,中移物联网,云计算开发高级工程师 EdgeBox简介 中移物联网是中国移动集团在物联网方向的专业研发子公司,在各个垂直行业都有非常丰富和完成的解决方案. 本文通过中移物联网的物联网边缘计 ...

  3. Mysql中常用函数 分组,连接查询

    函数 在Mysql中函数是一组预定义的指令,用于执行特定的操作并返回结果,可类比Java中的方法.在SQL中函数根据其作用范围和返回结果方法分为两大类:单行函数,分组函数 单行函数 单行函数的特点为对 ...

  4. ansible批量部署apache

    ansible批量部署apache 目录 ansible批量部署apache 安装ansible 基于ansible进行基础准备 配置受控端本地软件仓库 安装受控端Apache(httpd)的最新版本 ...

  5. Power BI DAX 公式使用

    一.日期类 1.计算两个日期之间的差值 使用函数:DateDiff(< start_date >,< end_date >.<间隔>) 例:合同终止天数 = DAT ...

  6. python实现基于RPC协议的接口自动化测试

    01什么是RPC RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议.从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的 ...

  7. php 异步并行

    如果你有一批数据需要调用远程接口处理,而远程接口处理时间很长,比如需要1秒左右,那10条数据就是10秒,你的程序就要10S才能结束,而这样的话一旦接口提供方有点问题,就需要20秒 30秒甚至更久,这样 ...

  8. rust 终端输出 debug 信息

    配置方法 将 env_logger log 添加到 Cargo.toml : 打开 Cargo.toml 文件并在 [dependencies] 部分下添加 env_logger log . [pac ...

  9. 使用Apache的ab工具进行压力测试

    Apache附带的ab工具(本机使用的PHP环境是WAMP集成环境,ab工具位于D:\wamp\bin\apache\Apache2.2.21\bin)非常容易使用,ab可以直接在Web服务器本地发起 ...

  10. golang定时器之timer+ticker

    转载: https://juejin.cn/post/7327157426298011663 Timer 是一个一次性的定时器,用于在未来的某一时刻执行一次操作. 基本使用 创建 Timer 定时器的 ...