OpenCV关于视频处理的学习(VideoCapture类)-在检测中一些必要的图像操作

前言知识

在OpenCV中我们处理视频是先将视频保存成图像,然后再处理图像,将处理完的图像再生成视频这样子操作的。但是OpenCV中常见的图像操作有关容器有Mat,cvMat,IplImage等。在这些中,我们在选择的时候应该将哪一种作为处理图像的容器呢?
- Mat类型较CvMat与IplImage类型来说,有更强的矩阵运算能力,支持常见的矩阵运算。Mat类型侧重于计算,数学性高,OpenCV对Mat类型的计算也进行了优化。在计算密集型的应用当中,将CvMat与IplImage类型转化为Mat类型将大大减少计算时间花费。
- CvMat和IplImage类型更侧重于“图像”,OpenCV对其中的图像操作(缩放,单通道提取,图像阈值操作等)进行了优化。
- CvMat和IplImage的定义是结构体,而Mat的定义是类。从类型上就使得他们有很大的区别。结构体大多都是成员变量,而类中有成员变量、成员函数和重载函数。所以Mat利用自身的一些成员函数就可以进行很多的处理,但是CvMat和IplImage还需要一些辅助的函数去处理图片。

接下来再简单看一下如何初始化定义这三种类型的图像。
- Mat

Mat image = imread(const string& filename, intflags = 1);
  1. 这里第一个参数需要我们填写载入图片的名字,如果图片跟程序文件不在同一个文件夹下还需要加入图片的路径。
  2. 第二个参数定义的是指定一个加载图像的颜色类型。取0时为灰度图;取1时为彩色图像;取2时,若载入的图像的深度为16位或者32位,就返回对应深度的图像,否则,就转换为8位图像再返回;取4时,代表保持颜色通道不变。

    • CvMat
CvMat* image = cvCreateMat(int rows, int cols, int type);
  • IplImage
IplImage* image = cvLoadImage(const char* filename, int iscolor = 1)
  1. 第一个参数还是读取图片的名字。
  2. 第二个参数读取图片的方式,而其中每个方式所定义的数字与imread相同,如果观察源码不难发现,其实cvLoadImage在使用时调用了imread函数。

这里需要注意一点,当使用完定义的CvMat和IplImage时,得需要分别使用cvReleaseImage(&image)、cv

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值