opencv总结篇
来源:互联网 发布:天猫淘宝运营岗位职责 编辑:程序博客网 时间:2024/06/06 21:07
*opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高。而CvMat和IplImage类型更侧重于“图像”。在opencv2.0之前,opencv是完全用C实现的,但是,IplImage类型与CvMat类型的关系类似于面向对象中的继承关系。实际上,CvMat之上还有一个更抽象的基类—-CvArr,这在源代码中会常见。使用这两个结构的问题是内存需要手动管理,开发者必须清楚的知道何时需要申请内存,何时需要释放内存,因此在新版本的 OpenCV 中引入了能自动管理内存的Mat 类。
Mat是一个优秀的图像类,也是一个优秀的矩阵类。
打开摄像头/读取视频
VideoCapture可以从视频文件中读取图像也可以从摄像头中读取图像
VideoCapture(0)打开固定的摄像头,VideoCapture(-1)是打开随机的摄像头,VideoCapture(**.avi)是打开视频文件。
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>using namespace std;using namespace cv;int main(){// VideoCapture capture(0);//打开摄像头 VideoCapture capture("qc.avi");//打开视频 if (!capture.isOpened())//检验是否打开 return -1; Mat frame; while (1) { capture >> frame; imshow("show video",frame); waitKey(30); } return 0;}
Mat转换为IplImage 和CvMat
cv::Mat img; CvMat cvMatImg = img; IplImage IplImg = img;
ps:需要特别注意的是,类型转换后,IplImage 和 CvMat 与 Mat 共用同一矩阵数据,而IplImage 和 CvMat 没有引用计数功能,如果上例中的 img 中数据被释放, iplimg 和 cvimg 也就失去了数据。因此要牢记不可将 Mat 对象提前释放。
IplImage 和CvMat转换为Mat
IplImage *IplImg = cvLoadImage("fruits.jpg"); Mat img(IplImg, true);
Mat 类有两个构造函数,可以实现 IplImage 和 CvMat 到 Mat 的转换。这两个函数都有一个参数copyData。如果copyData的值是false,那么Mat将与IplImage或CvMat 共用同一矩阵数据;如果值是 true,Mat 会新申请内存,然后将 IplImage或CvMat 的数据复制到 Mat 的数据区。
- opencv总结篇
- opencv总结
- opencv总结
- 数字图像处理与OpenCV总结篇:一
- opencv-矩阵操作总结
- opencv排错总结
- opencv排错总结
- OPENCV资料总结
- opencv排错总结
- OpenCV知识总结
- opencv 要点总结
- opencv CvMat操作总结
- opencv排错总结
- OPENCV资料总结
- opencv CvMat操作总结
- opencv矩阵操作总结
- Opencv 特征提取总结
- OPENCV资料总结
- 关于ASP.NET中经典三层架构的理解
- Java总结篇系列:Java String
- Fragment的toobar应用到Activity中
- 定时任务时间设置
- NS2中Mac802_11定时器介绍
- opencv总结篇
- java web学习总结47:监听器(Listener)在开发中的应用
- 两种方式实现Activity中状态栏,导航栏的隐藏与显示
- Nginx图片处理
- mkimage command not found
- Android Build System[二]
- HTML标签
- Redis及其Sentinel配置项详细说明
- Jquery miniUI实现三级联动