OpenCV2:Mat介绍及常见用法
1.Mat基础
1
2
3
|
cv::Mat a ; //创建矩阵头
a = cv::imread( "f:\\psb.jpg" ); //读入图像
cv::Mat b = a ; //复制
|
cv::Mat c = a.clone(); cv::Mat d ; a.copyTo(d);
- OpenCV中的内存分配是自动完成的(不是特别指定的话)
- 使用OpenCV的C++ 接口时不需要考虑内存释放问题
- Mat的赋值运算和拷贝构造函数只会拷贝矩阵头,仍然共同同一个矩阵
- 如果要复制矩阵数据,可以使用clone和copyTo函数
2.Mat存储方法
Mat的创建
构造函数
cv::Mat img(2,2,CV_8UC3,cv::Scalar(0,0,255));
构造函数的前两个参数指定了矩阵的行和列
第三个参数指定矩阵元素的数据类型以及通道数,其指定规则如下:
CV_[The number of bits per item][Signed or Unsigned][TypePrefix]C[The channel number]
Create方法
img.create(4,4,CV_8UC(2));
MATLAB形式的初始化
cv::Mat e = cv::Mat::eye(4,4,CV_64F); cv::Mat z = cv::Mat::ones(2,2,CV_32F); cv::Mat o = cv::Mat::zeros(3,3,CV_8UC1);
小矩阵的初始化
Mat c =(Mat_<double>(3,3)<<1,2,3,0,-1,0,4,5,6);
3.Mat的输入输出
使用imread函数,向Mat对象中写入一个图像。
a = cv::imread("f:\\psb.jpg");//读入图像
cv::Mat imread(const string& filename,int flags=1)
使用imwrite函数,将Mat对象保存到指定的文件中。
bool imwrite(const string& filename,InputArray img,constvector<int>& params=vector<int>())
- JPEG,params用来指定图像的质量(0到100),默认的是95. CV_IMWRITE_JPEG_QUALITY
- PNG,params用来指定图像的压缩级别(0到9),压缩级别越高图像占用的空间越小,保存图像所用的时间越久。默认值是3. CV_IMWRITE_PNG_COMPRESSION
- PPM,PGM,PBM,params是一个标记(0或者1),默认的是1.CV_IMWRITE_PXM_BINARY
![](/assets/blank.gif)
void createAlphaMat(Mat &mat) {for(int i = 0 ; i < mat.rows ; i ++) {for(int j = 0 ; j < mat.cols ; j ++) {Vec4b &rgba = mat.at<Vec4b>(i,j);rgba[0] = UCHAR_MAX ;rgba[1] = saturate_cast<uchar>((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX);rgba[2] = saturate_cast<uchar>((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX);rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));}} } int main() {Mat mat(480,640,CV_8UC4);createAlphaMat(mat);vector<int> compression_params ;compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);compression_params.push_back(9);imwrite("alpha.png",mat,compression_params);return 0; }
![](/assets/blank.gif)
4.Mat的显示
Mat img = imread("f:\psb.jpg"); const string name ="Hu"; namedWindow(name); imshow(name,img); waitKey();
OpenCV2:Mat介绍及常见用法相关推荐
- POCO C++ Libraies介绍及常见用法
POCO C++ Libraies属于功能广泛.轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台.工业自动化等领域. POCO C++ Libraies由多个功能模 ...
- freemaker介绍及常见的用法解析
1.简介 freemaker(FTL)是一个模板引擎,即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Jav ...
- stringstream常见用法介绍
本文主要介绍 C++ 中 stringstream 类的常见用法. 1 概述 <sstream> 定义了三个类:istringstream.ostringstream 和 stringst ...
- 怎么用计算机打出cpdd,网络语cpdd是什么梗啥意思 cpdd出处来源哪里常见用法介绍...
原标题:网络语cpdd是什么梗啥意思 cpdd出处来源哪里常见用法介绍 [海峡网] 随着网络的快速发展,抖音和微博这样的软件也是越来越火,因此很多流行语就随之诞生,特别是在抖音里,经常看到游戏相关的用 ...
- 框架前期准备篇之AutoFac常见用法总结 转载
框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...
- 第二节:框架前期准备篇之AutoFac常见用法总结
一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点点小小的风波,我说我的好,他说他的好,非常容 ...
- python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解
本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...
- ASH的适用场景和常见用法(附2个经典案例)
墨墨导读:本文来自墨天轮用户"取名浪费我半小时"投稿,个人主页:https://www.modb.pro/u/397063,介绍ASH的适用场景,并介绍看ASH和AWR之间的使用区 ...
- netstat命令常见用法
一.介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息.Netstat用于显示与IP.TCP.UDP和ICM ...
最新文章
- JavaScript 读写文件
- linux工程师前景_linux运维工程师前景怎样 就业薪资待遇高吗
- For in 详解
- 算法高级(43)-过滤垃圾邮件、短信?-朴素贝叶斯算法
- Android开发之 Android 的基本组件的概述
- [C++]Linux之C编程异常[true未定义解决方案]
- ACLEMNLP'21 | 基于神经转移模型的论辩挖掘任务
- 使用FreeSWITCH SIP落地的配置总结
- vue安装vue-pdf(预览pdf)
- IAR for ARM介绍、下载、安装与注册
- 打不开网页服务器丢失,苹果浏览器safari打不开,丢失网络
- 个人博客页面的简单实现
- Linux 查看与修改mtu值
- TCP/IP中的拥塞窗口控制机制
- 鸿蒙车载系统丰田,华为公布三大鸿蒙车载操作系统
- Android音频通信--简单演示程序
- 架构设计第三步:评估和选择备选方案
- Python ❀ 插入排序
- 数据结构中数据、数据对象、数据元素、数据项之间的关系
- python怎么画三维函数图像_python中如何画三维的图形?