opencv 学习记录(1)Mat IpImage
2015-07-15 19:01
225 查看
Mat相对于IplImage的优势:
1、自动开辟内存,在不需要的时候立即释放内存。不用人为的去纠结内存管理。也就是C++类相对于C语言的优势。但嵌入式中还是C语言。。。。
2、每一个Mat对象都有自己的信息头,但共享一个数据矩阵。拷贝构造函数只拷贝信息头和矩阵指针,不拷贝数据图像矩阵。
Mat简单使用:
举例:
Mat A, C; // 只创建信息头部分
A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存
Mat B(A); // 使用拷贝构造函数
C = A; // 赋值运算符
说明:以上代码中的所有Mat对象最终都指向同一个也是唯一一个数据矩阵。虽然它们的信息头不同,但通过任何一个对象所做的改变也会影响其它对象。实际上,不同的对象只是访问相同据的不同途径而已。
当我们不仅想拷贝数据头,还想拷贝图像数据的时候,可以使用函数clone()或者 copyTo()。
举例:
Mat img1 = img.clone();
Mat img2;
img.copyTo(img2);
此处,img1和img2的值不相互影响,不共享一个数据矩阵。
但是由于图像矩阵都比较庞大,考虑到时间问题,尽量避免整个图像矩阵的拷贝。
在Mat中,当我们想要使用一幅图像的部分区域,也就是ROI时,可以使用如下方式:
举例:
Mat img1 (img,Rect(10,10,100,100)); //这里使用了一个长方形圈出一个ROI区域
Mat img2 = img(Range:all(),Range(1,3)); //这里就抠出了边界作为ROI
此处,由于用的是同一个数据矩阵,如果修改img1或者img2的值,也会修改img中的值。
IplImage与 Mat互相转换:
举例1:
IplImage *img = cvLoadImage("a.png",1);
Mat img1(img);
举例2:
Mat img = cvLoadImage("a.png",1);
IplImage *img2 (img);
结束。
参考网站:opencv中文论坛。
1、自动开辟内存,在不需要的时候立即释放内存。不用人为的去纠结内存管理。也就是C++类相对于C语言的优势。但嵌入式中还是C语言。。。。
2、每一个Mat对象都有自己的信息头,但共享一个数据矩阵。拷贝构造函数只拷贝信息头和矩阵指针,不拷贝数据图像矩阵。
Mat简单使用:
举例:
Mat A, C; // 只创建信息头部分
A = imread(argv[1], CV_LOAD_IMAGE_COLOR); // 这里为矩阵开辟内存
Mat B(A); // 使用拷贝构造函数
C = A; // 赋值运算符
说明:以上代码中的所有Mat对象最终都指向同一个也是唯一一个数据矩阵。虽然它们的信息头不同,但通过任何一个对象所做的改变也会影响其它对象。实际上,不同的对象只是访问相同据的不同途径而已。
当我们不仅想拷贝数据头,还想拷贝图像数据的时候,可以使用函数clone()或者 copyTo()。
举例:
Mat img1 = img.clone();
Mat img2;
img.copyTo(img2);
此处,img1和img2的值不相互影响,不共享一个数据矩阵。
但是由于图像矩阵都比较庞大,考虑到时间问题,尽量避免整个图像矩阵的拷贝。
在Mat中,当我们想要使用一幅图像的部分区域,也就是ROI时,可以使用如下方式:
举例:
Mat img1 (img,Rect(10,10,100,100)); //这里使用了一个长方形圈出一个ROI区域
Mat img2 = img(Range:all(),Range(1,3)); //这里就抠出了边界作为ROI
此处,由于用的是同一个数据矩阵,如果修改img1或者img2的值,也会修改img中的值。
IplImage与 Mat互相转换:
举例1:
IplImage *img = cvLoadImage("a.png",1);
Mat img1(img);
举例2:
Mat img = cvLoadImage("a.png",1);
IplImage *img2 (img);
结束。
参考网站:opencv中文论坛。
相关文章推荐
- nginx
- Linux系统防CC攻击自动拉黑IP增强版Shell脚本
- centos 6.5安装vncserver 并开启远程桌面
- [三]三种 hls 解析源码 vlc ffmpeg exoplayer
- [二]三种 hls 解析源码 vlc ffmpeg exoplayer
- [一]三种 hls 解析源码 vlc ffmpeg exoplayer
- 同一个tomcat中部署多个工程,不能访问的问题
- ubuntu中安装openssh-server失败(首先ubuntu不能远程root登录)
- How-to: enable hbase ACL and verify
- Linux C 实现mycp 可以显示文件拷贝进度
- (linux服务器架构设计 金融行业CMS系统)第一篇 【规划思路】
- linux系统编程:进程间通信-fifo
- Linux-阿
- linux上安装subversion
- Linux——常用命令详解
- Linux——常用命令详解
- iOS 操作系统架构
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- SQL Server如何启用xp_cmdshell组件
- ACM--Entrophy(哈希+数组 建树)