Opencv 中 Mat中元素的值读取方法总结
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中元素的值读取方法总结的更多相关文章
- 输出有序数组的中两个元素差值为指定值diff的两个元素
题目: 输出有序数组的中两个元素差值为指定值diff的两个元素. 思路: 这与输出两个元素的和的值为一定值类似,需要两个指针,不同的是:指针不是一左一右,而是一前一后. 如果差值等于diff,则返回: ...
- jquery中修改一个元素的值或内容
jquery中修改一个元素的值或内容,比如数值增加可以使用这个方法取得原值并+1 $this.text(function(i,ot){return Number(ot)+1;});
- 【opencv基础】OpenCV从Mat中提取某些行或列
这两个函数返回的是指向原矩阵内部位置的指针,类似于浅拷贝: code cv::Mat align_mean(cv::Mat mean, cv::Rect facebox, float scaling_ ...
- form表单元素中disabled的元素的值不会提交到服务器
1.表单元素中disabled的元素的值不会提交到服务器,后台获取的值为null <form id="myForm" action="#" method= ...
- python中删除某个元素的3种方法
python中关于删除list中的某个元素,一般有三种方法:remove.pop.del 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除 举例说明: >>> st ...
- js中常用追加元素的几种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- (转)OpenCV 访问Mat中每个像素的值
转自:http://blog.csdn.net/xiaowei_cqu/article/details/19839019 在<OpenCV 2 Computer Vision Applicati ...
- 遍历查找集合或者数组中的某个元素的值 java代码 详解 Android开发
import java.util.Scanner; public class Test21 { public static void main(String[] args) { //定义并初始化数组 ...
- JavaScript获取table中某一列的值的方法
1.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- Java之——删除ArrayList中的反复元素的2种方法
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47414935 ArrayList是Java中最经常使用的集合类型之中的一个.它同意 ...
随机推荐
- 基于Jenkins + Argo 实现多集群的持续交付
作者:周靖峰,青云科技容器顾问,云原生爱好者,目前专注于 DevOps,云原生领域技术涉及 Kubernetes.KubeSphere.Argo. 前文概述 前面我们已经掌握了如何通过 Jenkins ...
- 用 KubeKey 快速离线部署 K8s 与 KubeSphere
作者:尹珉,KubeSphere Ambassador,KubeSphere 社区用户委员会杭州站站长 一.KubeKey 介绍 KubeKey(以下简称 KK) 是一个用于部署 Kubernetes ...
- 物理实验霍尔效应判断P/N型半导体笔记
最近这不要物理实验期末考试了嘛,我火速抄起实验书准备复习. 复习到霍尔效应判断P/N型半导体这一部分时很惊奇地发现网上一会儿还搜不出个明了的总结,也有很多误导性的判断方法.Σ( ° △ °|||)︴ ...
- uniswap v2 类比
当然,以下是生活中的类比,帮助你理解 Uniswap V2 的核心概念: 1. 自动化做市商(AMM) 生活中的例子:自动售货机 解释:自动售货机内部有一种商品(如饮料)和一定的库存.用户通过投币购买 ...
- 5道大厂的JAVA经典面试题
前言 本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式? 有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什 ...
- WebLogic XMLDecoder反序列化漏洞
目录 前言 XMLDecoder概述 XMLDecoder反序列化漏洞 漏洞复现 前言 上篇复现了T3反序列化漏洞,XMLDecoder反序列化在WebLogic中也是一类影响很大的反序化漏洞. XM ...
- JUC (Java Util Concurrency) 基础内容概述
目录[-] 转自:http://www.goldendoc.org/2011/05/juc/ 1. JUC概况 2. 原子操作 3. 指令重排 4. Happens-before法则:(Java 内存 ...
- JVM学习笔记-操作数栈(Operand Stack)
Like the local variables, the operand stack is organized as an array of words. But unlike the local ...
- Python打包工具之pyinstaller
前言: 近期使用PySimpleGUI开发了一款开发者工具X-助手工具,意打造成平常开发助手,无论是图片还是网址的处理等等都需要这一个工具即可,无需在网上找各个网站去找解决方案, 对于GUI的打包工具 ...
- linux虚拟ip原理
在 Linux 中,虚拟 IP(Virtual IP,VIP)是指一组与物理网络接口卡 (NIC) 绑定的虚拟 IP 地址,这些 IP 地址并不是物理上存在的,而是通过软件模拟实现的. Linux 实 ...