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. KubeKey v3.1 发布:快速自定义离线安装包

    日前,KubeKey v3.1 正式发布.该版本主要对离线场景部署.离线包制作以及向 Kubernetes v1.24+ 升级进行了优化. KubeKey 简介 KubeKey 是 KubeSpher ...

  2. Windows10关闭系统自动更新--专业版

    当你正在跑项目,cpu负荷,内存负荷,这时候Windows服务模块没有人情味滴突然来个更新撑爆你的磁盘读写,那感觉简直炸锅 像这样: 什么?加个固态就好了 你要是上了固态,就不应该看到这篇文章,相见即 ...

  3. DHorse v1.6.0 发布,基于 k8s 的发布平台

    版本说明 新增特性 支持Codeup(阿里云云效)代码仓库: 支持环境的自动部署: 优化特性 管理员角色部署环境部需要审批: 优化页面展示: 升级指南 升级指南 DHorse介绍 DHorse是一个轻 ...

  4. Linux基础常识

    1 什么是shell shell是Linux系统的用户界面,提供了用户与内核交互的一种接口,它接收用户输入的命令并到送到内核去执行,因此也被称为Linux的命令解释器. 显示系统当前使用的shell ...

  5. 技术前沿:AI大模型在自动化测试中的应用实例

    哈喽,大家好,我是六哥!今天咱们来聊一聊如何用AI大模型(比如GPT-3.5)来做自动化测试,别看这东西听起来高大上,但也没那么神,跟着我咱们一步一步来,保证你也能轻松搞定,学会了保准让你在工作中老省 ...

  6. flutter TabBarView 动态添加删除页面

    在TabBarView 动态添加页面后删除其中一个页面会导致后面的页面状态错误或删除的页面不正确.出现这种问题是由于创建子页面时没有为子页面设置唯一的key导致的. 1 void addNewPage ...

  7. 23、表空间及段区块_1(段区块管理、pctfree、数据块结构、行迁移、高水位)

    oracle数据库的物理存储结构 1.spfile:参数文件 2.controlfile:控制文件 3.datafile:数据文件 4.redo log 5.arch:归档日志 oracle数据库的d ...

  8. Spring MVC 3.2 技术预览(三):动手写一个异步Controller方法

    原文地址:http://blog.springsource.org/2012/05/10/spring-mvc-3-2-preview-making-a-controller-method-async ...

  9. Hibernate 之Hibernate缓存

    1.缓存:缓存是什么,解决什么问题? 位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache(摘自Robbin的<缓存技术浅谈>).目的:让数据 ...

  10. 命令行应用开发初学者指南:脚手架篇、UI 库和交互工具

    在日常的前端开发工作中,我们经常依赖各种命令行工具来提高效率和代码质量.例如,create-react-app 和 eslint 等工具不仅简化了项目的初始化过程,还能自动执行代码检查和格式化任务.当 ...