博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈opencv中的Mat在处理图像数据中的用法
阅读量:3664 次
发布时间:2019-05-21

本文共 1043 字,大约阅读时间需要 3 分钟。

当下人们都在谈机器学习,深度学习,人工智能,大数据,机器视觉,而这些都离不开一些主要的算法,opencv就是这么一个可以应用到工业界的优秀算法实现的库(当然搞算法的第一选择还是matlab工具)。

在mat.hpp文件里有Mat类的定义,在此之前有一大段的注释,就是对该Mat类的用法的最好理解。花点时间研读一下,大有裨益。

Mat类的实现挺复杂但也强大,是使用opencv必须了解的一个重要的类。

n-dimensional dense array class

一个n维的稠密数组类

The class Mat represents an n-dimensional dense numerical single-channel or multi-channel array. It
can be used to store real or complex-valued vectors and matrices, grayscale or color images, voxel
volumes, vector fields, point clouds, tensors, histograms (though, very high-dimensional histograms
may be better stored in a SparseMat ). 

Mat这个类代表了一个n维稠密的数值的单通道或多通道的数组。它能被用于存储实数(或复数)数值的向量和矩阵,灰度(或彩色)图像,体素容量,向量场,点云,张量,直方图(尽管很高维的直方图可能最好存放在稀疏矩阵里)。

下面结合一个例子,说明如何对图像数据进行访问。

Mat T = imread("test.png", IMREAD_COLOR);

cout << T.type() <<  endl;

打印出该图像数据矩阵的类型,比如这里是CV_8UC3表明有3个通道(通常是BGR顺序),每个通道是8位无符号数即unsigned char

在opencv的Mat里,图像数据矩阵中的数据与实际看到的图像的数据是一样的摆放,即都是正的。如何取得某一位置比如i行,j列处的像素数据?

需要用到Vec3b即Vec<uchar, 3>类型

Vec<uchar, 3> pixel = T.at<Vec<unsigned char, 3>>(i,j);
cout << pixel << endl;

这就打印出了图像i行,j列处的像素值。

转载地址:http://otgfn.baihongyu.com/

你可能感兴趣的文章
JUC - Java8流式编程
查看>>
MySQL - 高级部分:
查看>>
JavaWeb框架 - Spring注解部分:
查看>>
SpringBoot使用外部的Tomcat: bean with name 'defaultValidator' defined in class path resource
查看>>
SpringBoot上传文件413问题:
查看>>
Java多线程 - AQS简单实现:
查看>>
建造者模式:
查看>>
适配器模式:
查看>>
LinkedList源码分析
查看>>
美团Java一面面经
查看>>
疏漏总结(九)——http与https
查看>>
疏漏总结(十)
查看>>
线程池
查看>>
servlet的其他作用,git的使用方法
查看>>
Oracle数据库sql*plus常用命令
查看>>
Oracle中表的简单查询
查看>>
Linux-进程管理
查看>>
Linux-ssh服务及服务管理、文件传输
查看>>
Linux-网络配置
查看>>
开发中浏览器兼容的问题总结
查看>>