cv::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
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; }
4.Mat的显示
Mat img = imread("f:\psb.jpg"); const string name ="Hu"; namedWindow(name); imshow(name,img); waitKey();
cv::mat的基本操作相关推荐
- OpenCv学习笔记(二)—cv Mat学习
由于在写上一篇图像的数据结构时,发现自己只知道CvMat,竟然还有Mat数据结构,真是无知了,看了这么多程序,貌似没有看到这个结构.有可能那些程序都是些老版本的例子,这是在2.0以后加上的,所以我也得 ...
- 【OpenCv】c++ 入门认识 Mat 类,单通道 Mat 的基本操作
文章目录 前言 Mat 类 Mat 类的构造方式 Mat 基本操作 单通道 Mat 的基本操作 使用成员变量 rows 和 cols 获取矩阵的行数和列数 使用成员函数 size() 来获取矩阵的尺寸 ...
- Mat矩阵基本操作与示例 OpenCV
OpenCV的基本矩阵操作与示例 OpenCV中的矩阵操作非常重要,本文总结了矩阵的创建.初始化以及基本矩阵操作,给出了示例代码,主要内容包括: 创建与初始化 矩阵加减法 矩阵乘法 矩阵转置 矩阵求逆 ...
- OpenCV【零】—————cv::Mat——Mat对象创建方法
OpenCV (一)--Mat对象创建方法 目录 OpenCV (一)--Mat对象创建方法 1. cv::Mat优点及原理(本质类) 2. Mat类拷贝及对象的创建方法 3. Mat 对象元素的高效 ...
- 【FFmpeg】使用sws_scale将AVFrame转换后的图像数据放入cv::Mat中
1.方法一,伪代码如下 cv::Mat mat; AVFrame avFrame; const int stride[] = {static_cast<int>(mat.step[0])} ...
- 【OpenCV】正确创建用于保存YUV420P格式的cv::Mat
1.问题描述 cv::Mat保存RGB24或BRG24格式时,传入宽.高和格式类型CV_8UC3就行了:今天在创建cv::Mat用来保存YUV420P时,有点懵圈了,因为类型是CV_8UC1,直接传宽 ...
- 【OpenCV】cv::Mat和std::vector之间的相互转换
Mat转换成Vector 以vector 为例,其它模型类似 vector getVector(const Mat & a) { Mat b; a.convertTo(b, CV_64F); ...
- cv::Mat使用笔记
1. 构造 无参数构造方法 Mat::Mat() 创建行数为 rows,列数为 col,类型为 type 的图像 Mat::Mat(int rows, int cols, int type) 创建大小 ...
- OpenCV学习(4) Mat的基本操作(1)
图像在OpenCV中都是通过Mat类来存储的,Mat可以用来表示N维矩阵,当然用的最多的还是二维矩阵. Mat类有两部分组成:第一部分是头信息,这些信息主要用来描述矩阵,比如矩阵维数ndims,row ...
最新文章
- sftp进入指定目录_CentOS7服务搭建----搭建SFTP(安全文件传送协议)服务器
- angular5 httpclient的示例实战
- adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
- 查看Unity工程版本
- linux过滤端口抓包_Linux抓包工具tcpdump使用总结,WireShark的过滤用法
- 无人出租车被警察截停后逃逸!AI:我当时害怕极了
- 还有必要吗?iPhone 11系列终于要全家族支持双卡双待了
- 【kafka】kafka Producer Metadata概述及源码分析
- 在C#中利用Keep-Alive处理Socket网络异常断开的方法 (转)
- 上海GDD(谷歌开发者大会),第一天总结
- python 螺旋数组_奇技淫巧 - Python绘制各种简单优美曲线
- sun的java认证考试_Sun Java认证考试科目
- 设计模式-Builder模式详解
- 忆我的大学老师----(一)
- 第12届信息化领袖峰会丨行程安排新鲜出炉
- 数据分析Power BI数据建模教程(四)——如何创建计算度量值和计算表
- 华硕路由搭建php网站,华硕路由器操作模式
- 用腾讯云COS制作个人图床
- VMware虚拟机的安装,并编写简单的C程序
- PHP PEAR网站遭黑客入侵,官方软件安装包被篡改
热门文章
- CTeX里是如何无限期试用winedt 7的
- python渗透测试入门之burpsuite载核生成器
- 机器学习资料与攻略超强整理吐血推荐(一)
- Android 13正式发布,谷歌I/O大会你不得不知的4大看点
- 顺序表插入删除查找操作
- win10连接共享打印机报错问题如0x00000709/0x0000011b/0x00000040等
- 《互联网金融投资理财一册通》一一第2章 揭秘余额宝收益背后的秘密
- 三个好用的云渲染推荐
- FinalData恢复数据
- 更新Linux维护的PCI硬件数据库,Bus options (PCI etc.)总线选项 - Linux-4.4-x86_64 内核配置选项...