OpenCV Mat结构关键特性记录
来源:互联网 发布:地下室防水算法 编辑:程序博客网 时间:2024/06/06 18:04
最近准备开始阅读Opencv 3 Computer Vision Application Programming CodeBook,在第一章中学习到Mat的一些特性,在此记录一下,以后在OpenCV开发中肯定可以用得到。
Mat结构(类)是OpenCV中进行图像处理的基本元素,代表一幅图像。可以创建一个空的Mat对象(cv::Mat img),可以创建指定图像大小和数据格式的Mat对象(cv::Mat img(128, 128, cv::CV_8UC3, cv::Scalar(255,255,0)) - 经过初始化的彩色图像, cv::Mat img(cv::Size(128,128), cv::CV_8U) - 未初始化的灰度图像),可以从文件读取图片然后赋值给一个Mat对象(cv::Mat img = cv::imread("img.jpg", 1)),还可以从摄像头等设备读取数据然后保存到Mat对象。同时,也可以将一个cv::Mat对象赋值给另一个cv::Mat对象。
cv::Mat对象的赋值操作需要注意,首先,cv::Mat结构包括两个部分:特性区和数据区,特性区存放的是图像或者数据矩阵的行/列值,数据类型(无符号值,整数,浮点数等)等信息,数据区存放的是图像中像素值。在赋值中,OpenCV虽然新建了一个cv::Mat对象,但是两个对象共用一个数据区,只是特性区属于各自对象,当其中一个对象的生命期结束要释放空间时,如果数据区仍然被其他cv::Mat对象引用,那么就不会释放,直到最后引用此数据区的cv::Mat对象被释放。
根据cv::Mat数据区的这一特性,在选择ROI(Region of Interest)的时候,创建的小图像从大图像中选择一块区域,实际小图像的Mat对象只是新建了特性区,数据区仍然指向大图像的数据区的兴趣部分。
同时,在函数传参时,虽然传入的是cv::Mat对象,但是,并非将整个cv::Mat对象进行拷贝,只是拷贝了特性区,形参和传参共用同一块数据区。因此在函数内部修改数据区,那么传入的cvMat对象也会被修改,而不必用传入引用或者传入指针代替。
还有一个特点,使用cv::Mat::create()成员函数时,虽然使为cv::Mat对象特性变化,如果原对象的数据区能够容下新对象的数据区,那么OpenCV就不会释放旧的数据区再新建,而是直接采用原数据区。
- OpenCV Mat结构关键特性记录
- OpenCV Mat结构
- OpenCV-Mat结构详解
- OpenCV Mat 结构
- opencv(一) Mat结构访问
- opencv中的Mat结构操作
- OPENCV里的Mat结构
- opencv 学习记录(1)Mat IpImage
- OpenCV数据结构之Mat 底层结构
- OpenCV学习笔记(五):Mat结构
- OpenCV Mat
- opencv-Mat
- Mat--opencv
- opencv---mat
- opencv Mat
- opencv mat
- OpenCV Mat
- opencv-mat
- linux shell中 if else以及大于、小于、等于逻辑表达式介绍
- ajaxFileUpload报错jQuery.handleError is not a function
- AJAX 教程
- 两个队列实现栈(stack)
- Android系统system用户权限和root权限的获取
- OpenCV Mat结构关键特性记录
- 简单网络请求+ListView
- windows下ruby安装环境配置
- Windows 下安装 express
- Win API 和 MFC 创建的线程中实现设置定时器
- struts2_day02_05-获取表单数据(使用ActionContext获取)
- 1、编写一个Java程序在屏幕上输出“你好!”。
- Android 开发的17个建议,紧跟Google官方,进阶必看!
- ROS launch文档介绍