【VS开发】C++ opencv Mat基础
OpenCV2:Mat
1.Mat基础
1
2
3
|
cv::Mat //创建矩阵头 a "f:\\psb.jpg" ); //读入图像 cv::Mat //复制 |
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();
【VS开发】C++ opencv Mat基础的更多相关文章
- 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization
[编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...
- Android NDK开发及OpenCV初步学习笔记
https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...
- swift开发多线程篇 - 多线程基础
swift开发多线程篇 - 多线程基础 iOS 的三种多线程技术 (1)NSThread 使用NSThread对象建立一个线程非常方便 但是!要使用NSThread管理多个线程非常困难,不推荐使用 ...
- iOS开发UI篇—Button基础
iOS开发UI篇—Button基础 一.简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二.按钮的三种状 ...
- Matlab to OpenCV Mat
convert Matlab matrix to OpenCV Mat. Support CV_32FC3 only currently. The Code int matlab2opencv(cv: ...
- 《Android Studio开发实战 从零基础到App上线》资源下载和内容勘误
转载于:https://blog.csdn.net/aqi00/article/details/73065392 资源下载 下面是<Android Studio开发实战 从零基础到App上线&g ...
- Linux及Arm-Linux程序开发笔记(零基础入门篇)
Linux及Arm-Linux程序开发笔记(零基础入门篇) 作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/bee ...
- OpenCV Mat数据类型及位数总结(转载)
OpenCV Mat数据类型及位数总结(转载) 前言 opencv中很多数据结构为了达到內存使用的最优化,通常都会用它最小上限的空间来分配变量,有的数据结构也会因为图像文件格式的关系而给予适当的变量, ...
- cocos2d-x开发:服务端基础库封装
元旦前面几天都在忙着面试,随后的几天也就一直在做服务端基础库开发方面的工作.对于服务端开发,是很久之前的事情了.那时候我还在大学读书,一直都是在倒腾服务端开发方面的东西,毕业后参加公司工作就是一直从事 ...
随机推荐
- python中函数的参数传递小结
“”“ 函数的参数 --必须参数,默认参数,组合参数 --函数我作为参数 --对象作为参数 --*args 可变参数 --**kwargs关键字参数 “”” def function1(a,b,*a ...
- tqdm如何在pandas里面使用
原文: https://segmentfault.com/a/1190000016059726 当然,首先我们得载入模块,在notebook中使用tqdm带的基于Js显示的进度条前,请务必检查是否安装 ...
- typedef void (*funcptr)(void)的含义
fun a;//等价于void (*a)(); 这样声明起来就方便多了 void (*a)();表示a是个指针,指向一个不带参数.返回值为空的函数 定义一个函数指针类型. 比如你有三个函数: void ...
- 如何优雅地防止MLE(for linux)
赛前最后一天模拟赛又有小伙伴MLE了--这里就讲一下如何较为精确地获取程序运行时间和空间. 资源统计当然是操作系统统计的最精确.所以可以这样写(noilinux实测通过,windows下应该不行): ...
- hdu6568 Math (概率dp)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6568 题意: 在$0$到$L$的坐标轴运输货物,在每个整数点可能丢失货物,丢失概率为$p$,丢失后可 ...
- js动态往对象里边添加一项
第一种方法let obj ={"name":"tom","age":16}let key = "id";let valu ...
- javascript实现集合Set、字典Dictionary、HashTable
集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. function Set() { this.items = {}; } S ...
- Qt多线程应用--QRunnable
http://blog.csdn.net/lefttime/article/details/5717349 作为Qt类中少有的基类, QRunnable提供了简洁有效的可运行对象的创建. 用QRun ...
- antd源码分析之——栅格(Grid)
官方文档 https://ant.design/components/grid-cn/ 目录 一.antd中的Grid 代码目录 1.整体思路 2.less文件结构图(♦♦♦重要) 3.less实现逻 ...
- mac mysql重置root用户密码
苹果机安装的MySQL后,设置初始密码 引子:.在苹果机上安装的MySQL之后,通过MySQLWorkBench登录本地数据连接,发现没有密码,而在安装MySQL的过程中,是没有设置过密码的其实,刚刚 ...