OpenCV参考手册之CvCapture结构体

cvCapture 1.cvCapture 是一个结构体,用来存储捕获下一帧图像所需要的信息。在视频处理中,可以一帧一帧读入,每一次都入后,结构体的内容自动更新,指向新的下一帧。 2.cvCreateFileCapture:参数为视频文件的路径,返回一个指向cvCapture的结构指针。最初的时候,指向视频文件的第一帧。 3.cvQueryFrame:参数为cvCapture型指针,将视频文件的下一帧加载到内存 阅读详情

1、CvCapture结构体:

CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCv中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复。

2、cvCreateFileCapture(const char* mov)

cvCreateFileCapture()通过参数设置确定要读入的avi文件,返回一个指向CvCapture结构的指针。这个结构包括了所有关于要读入avi文件的信息,其中包含状态信息。调用这个函数之后,返回指针所指向的CvCapture结构呗初始化到对应的avi文件的开头。

3、IplImage* cvCreateImage(CvSize size,int depth,int channels);

cvCreateImage:创建首地址并且分配存储空间:IplImage* cvCreateImage(CvSize size,int depth,int channels);

//size:图像的宽、高;depth:图像元素的位深度,可以是一下其中之一:

IPL_DEPTH_8U - 无符号8位整型
IPL_DEPTH_8S - 有符号8位整型
IPL_DEPTH_16U - 无符号16位整型
IPL_DEPTH_16S - 有符号16位整型
IPL_DEPTH_32S - 有符号32位整型
IPL_DEPTH_32F - 单精度浮点数
IPL_DEPTH_64F - 双精度浮点数

4、cvSetTrackbarPos("进度条名称","窗口名称",pos):

这个函数要和另外两个函数配套使用,一个是回调函数,也就是响应鼠标的函数(即下面的CvTrackbarCallback on_change),这个是自定义的。第二个是创建函数cvCreateTrackbar(),这个函数的最后一个参数是前面回调函数,用来创建一个进度条。

关于cvSetTrackbarPos,他有3个参数cvSetTrackbarPos("进度条名称","窗口名称",pos)。第三个参数是当前进度条的位置,可以按照视频帧数的比例来设置当前进度值,也可以用循环pos++来设置。

5、cvQueryFrame(CvCapture* capture):

表示从摄像头或者文件中抓取并返回一帧。

IplImage* cvQueryFrame(CvCapture* capture);函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并且返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。

cvQueryFrame的参数是CvCapture结构的指针。用来将下一帧视频文件载入内存,返回一个对应当前帧的指针。与cvLoadImage不同的是cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在cvCapture结构中分配好的内存,这样就没必要通过cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像对应的内存空间会被释放。

6、CvCaptureFromCAM(int index):

初始化从摄像头中获取视频:CvCapture* cvCaptureFromCAM(int index);

index:要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那么使用参数-1便可以。

函数给从摄像头的视频流分配和初始化CvCapture结构。

7、cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* value,int count,CvTrackbarCallback on_change);

该函数为开放计算机视觉(OpenCV)库库函数,创建trackbar并将它添加到指定的窗口。

定义:

CV_EXTERN_C_FUNCPTR(void (*CvTrackbarCallback)(int pos));

int cvCreateTrackbar(const char* trackbar_name,const char* window_name,int* value,int count,CvTrackbarCallback on_change);

参数:

trackbar_name:被创建的trackbar名字

window_name:窗口名字,这个窗口将为被创建trackbar的父对象

value:整数指针,它的值将反映滑块的位置,这个变量指定创建时的滑块位置。

count:滑块位置的最大值。最小值一直是0

on_change:每次滑块位置被改变的时候,被调用函数的指针。这个函数应该被声明为void Foo(int),如果没有回调函数,这个值可以设置为NULL。

函数cvCreateTrackbar用指定的名字和范围来创建trackbar(滑块或者范围控制),指定与trackbar位置同步的变量,并且指定当trackbar位置被改变的时候调用的回调函数。

被创建的trackbar默认显示在指定窗口的顶端,可以通过cvGetTrackbarPos来获取trackbar显示的位置信息,以及通过函数cvSetTrackbarPos来重新设置trackbar的位置。

8、double cvGetCaptureProperty(CvCapture* capture,int property_id);

double cvGetCaptureProperty(CvCapture* capture,int property_id)获取视频文件的一些属性,

//capture 视频获取结构;property_id 属性标识。

以下是OpenCV属性的一些宏定义:

CV_CAP_PROP_POS_MSEC //影片目前位置,为毫秒数或者视频获取时间戳

CV_CAP_PROP_POS_FRAMES //将被下一步解压/获取的帧索引,以0为起点

CV_CAP_PROP_POS_AVI_RATIO //视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH //视频流中的帧宽度
CV_CAP_PROP_FRAME_HEIGHT  //视频流中的帧高度
CV_CAP_PROP_FPS //帧率
CV_CAP_PROP_FOURCC  //表示codec的四个字符
CV_CAP_PROP_FRAME_COUNT  // 视频文件中帧的总数

CV_CAP_PROP_FORMAT       

CV_CAP_PROP_MODE          

CV_CAP_PROP_BRIGHTNESS    

CV_CAP_PROP_CONTRAST      

CV_CAP_PROP_SATURATION    

CV_CAP_PROP_HUE          

CV_CAP_PROP_GAIN         

CV_CAP_PROP_EXPOSURE     

CV_CAP_PROP_CONVERT_RGB   

CV_CAP_PROP_WHITE_BALANCE 

CV_CAP_PROP_RECTIFICATION 

通过创建一个Capture对象的指针后,调用cvGetCaptureProperty即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_CAP_PROP_FRAME_COUNT这个属性;因为cvGetCaptureProperty对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为AVI格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数~~~

例如:

示例1:

CvCapture* cap = cvCaptureFromFile(videoName);//获取视频

int numFrames = (int) cvGetCaptureProperty(cap,CV_CAP_PROP_FRAME_COUNT);//得到视频帧数,

//得到的帧数是148帧

示例2:[较好的方法]

IplImage* pImg = NULL;

int count = 0;

while((pImg = cvQueryFrame(cap))!=NULL){

count++;

}//得到的帧数只有60帧

9、cvSetCaptureProperty

int  cvSetCaptureProperty(CvCapture* capture,int property_id,double value);

注意此方法定位并不准确

capture:视频获取结构

property_id:属性识别,可以是下面之一:

 CV_CAP_PROP_POS_MSEC    //从文件开始的位置,单位为毫秒
CV_CAP_PROP_POS_FRAMES   //单位为帧数的位置(只对视频文件有效)
CV_CAP_PROP_POS_AVI_RATIO   // 视频文件的相对位置(0 - 影片的开始,1 - 影片的结尾)
CV_CAP_PROP_FRAME_WIDTH  //视频流的帧宽度(只对摄像头有效)
CV_CAP_PROP_FRAME_HEIGHT  //视频流的帧高度(只对摄像头有效)
CV_CAP_PROP_FPS  //帧率(只对摄像头有效)
CV_CAP_PROP_FOURCC  //表示codec的四个字符(只对摄像头有效)

value表示的是属性的值

10、cvSmooth

函数cvSmooth可以使用简单模糊、简单无缩放变换的模糊、中值模糊、高斯模糊、双边滤波的任何一种方法平滑图像。每一种方法都有自己的特点和局限。没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换和32位浮点数到32为浮点数的变换格式。简单模糊和高斯模糊支持1-或3-通道,8-比特和32-比特浮点图像。这两种方法可以(in-place)方式处理图像。中值和双向滤波工作于1-或3-通道,8-位图像,但是不能以in-place方式处理图像。

void cvSmooth(const CvArr* src,CvArr* dst,int smoothtype=CV_GAUSSIAN,int param1=3,int param2=0,double param3=0,double param4=0);

//src:输入图像

//dst:输出图像

//smoothtype:平滑方法

平滑方法如下:

CV_BLUR_NO_SCALE (简单不带尺度变换的模糊) - 对每个象素的 param1×param2 领域求和。如果邻域大小是变化的,可以事先利用函数 cvIntegral 计算积分图像。

CV_BLUR (simple blur) - 对每个象素param1×param2邻域 求和并做尺度变换 1/(param1.param2).

CV_GAUSSIAN (gaussian blur) - 对图像进行核大小为 param1×param2 的高斯卷积

CV_MEDIAN (median blur) - 对图像进行核大小为param1×param1 的中值滤波(i.e. 邻域是方的).

CV_BILATERAL (双向滤波) - 应用双向 3x3 滤波,彩色sigma=param1,空间 sigma=param2. 平滑操作的第一个参数.

param2:

平滑操作的第二个参数. 对于简单/非尺度变换的高斯模糊的情况,如果param2的值 为零,则表示其被设定为param1。

param3:

对应高斯参数的 Gaussian sigma (标准差). 如果为零,则标准差由下面的核尺寸计算:
sigma = (n/2 - 1)*0.3 + 0.8, 其中 n=param1 对应水平核,
n=param2 对应垂直核.
对小的卷积核 (3×3 to 7×7) 使用如上公式所示的标准 sigma 速度会快。如果 param3 不为零,而 param1 和 param2 为零,则核大小有 sigma 计算 (以保证足够精确的操作).
函数 cvSmooth 可使用上面任何一种方法平滑图像。每一种方法都有自己的特点以及局限。
没有缩放的图像平滑仅支持单通道图像,并且支持8位到16位的转换(与cvSobel和cvLaplace相似)和32位浮点数到32位浮点数的变换格式。
简单模糊和高斯模糊支持 1- 或 3-通道, 8-比特 和 32-比特 浮点图像。这两种方法可以(in-place)方式处理图像。
中值和双向滤波工作于 1- 或 3-通道, 8-位图像,但是不能以 in-place 方式处理图像.

11、cvGetSize

cvGetSize是Opencv提供的一种操作矩阵图像的函数

得到二维的数组的尺寸,以CvSize返回。

CvSize cvGetSize(const CvArr* arr);

它与cvGetDims()密切相关,cvGetDim()返回一个数组的大小。主要的不同是cvGetSize()是专为矩阵和图像设计的,这两种对象的维数总是2。其尺寸可以以CvSize结构的形式返回,例如当创建一个新的大小相同的矩阵或图像时,使用此函数就很方便。

12、cvSize

cvSize是OpenCV的基本数据类型之一。表示矩阵框大小,以像素为精度。与CvPoint结构类似,但数据成员是integer类型的width和heigh

原型:

typedef struct CvSize
{
int width; /* 矩形宽 */
int height; /* 矩形高 */
}
CvSize;

13、cvPyrDown

功能:函数cvPyrDown使用Gaussian金字塔分解对输入图像向下采样

格式:void cvPyrDown(const CvArr* src,CvArr* dst,int filter = CV_GAUSSIAN_5x5);

参数:src:输入图像、dst:输出图像,其宽度和高度应是输入图像的一半;filter:卷积滤波器类型,目前仅支持CV_GAUSSIAN_5x5。

【opencv3 学习记录】第二章 读取显示保存视频 一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f 阅读详情

相关推荐

python-OpenCV视频常规处理(六)

python操作视频常用函数及demo

菜鸟郭 5917

Opencv读取摄像头卡顿

Opencv读取摄像头卡顿 开发环境:Win10系统,罗技HD1080p高清摄像头,UE4_21,VS2017 开发原理:多线程中通过OpenCV对摄像头进行高清采集(1920*1080),然后显示到UMG中。 遇到问题:在2k采集模式下,画面卡顿厉害。 猜想1:是不是卡在采集后的图像cv::Mat往UTex...

迷雾森林的专栏 2万+

解决RK3566 USB OTG模式识别问题:从原理图分析到otg_mode文件操作全解析

本文深入解析RK3566 USB OTG模式识别问题,从硬件原理图设计到Linux内核的otg_mode文件操作,提供全面的调试方案。针对USB_OTG0_ID引脚电路设计、电源管理关联及内核驱动交互等关键点,给出实战调试技巧和常见问题解决方案,帮助开发者高效解决USB OTG模式切换难题。

eee77的博客 866

cv2参数

CV_CAP_PROP_POS_MSEC 视频文件的当前位置(以毫秒为单位)或视频捕获时间戳。 CV_CAP_PROP_POS_FRAMES 接下来要解码/捕获的帧的基于0的索引。 CV_CAP_PROP_POS_AVI_RATIO 视频文件的相对位置:0 - 电影的开始,1 - 电影的结尾。 CV_CAP_PROP_FRAME_WIDTH 视频流中帧的宽度。 CV_CAP_PROP_FRAME_...

weixin_43883907的博客 981

【ANSYS Workbench仿真】命令流:压力渗透pressure penetration

对与流体接触的part添加边界压力,使流体压力渗透点的接触应力与流体压力相等,以便得到真实的变形结果,就需要用到“pressure penetration”。 但是在ansys中,只能通过ADPL的形式添加,即在workbench中添加命令流的形式。此文主要介绍了**压力渗透的添加要点**和**命令流使用说明**。

路边小M's Blog 1万+

先进封装技术 Part03---重布线层(RDL)的科普

RDL是一种在芯片封装过程中用于重新分布电气连接的技术。它通过在芯片表面或中介层上形成额外的布线层,重新分配芯片的I/O(输入/输出)位置,以适应不同的封装需求和提高电气连接的灵活性。

阿拉伯梳子的专栏 4703

Opencv参考手册之CvCaputre结构体

1、CvCapture结构体: CvCapture是一个结构体,用来保存图像捕获的信息,就像一种数据类型(如int,char等)只是存放的内容不一样,在OpenCV中,它最大的作用就是处理视频时(程序是按一帧一帧读取),让程序读下一帧的位置,CvCapture结构中,每获取一帧后,这些信息都将被更新,获取下一帧回复。 2、cvCreateFileCapture(const char* mov)...

不积跬步无以至千里 943

SAP ABAP实战:用GN_DELIVERY_CREATE批量创建内部交货单的完整代码与避坑指南

本文详细介绍了在SAP ABAP开发中使用GN_DELIVERY_CREATE函数批量创建内部交货单的完整实现方案。通过数据结构设计、多源数据整合、批量处理逻辑和错误处理机制等核心环节的深入解析,帮助开发者高效完成物流单据自动化处理,特别针对VL31N/VL32N等常见场景提供避坑指南。

weixin_42116058的博客 343

摄像头相关API_拔剑-浆糊的传说_新浪博客

OPENCV中国 http://www.opencv.org.cn/index.php/HighGUI中文参考手册 HighGUI中文参考手册 HighGUI概述 简单图形界面 读取与保存图像 视频读写函数 实用函数与系统函数 [编辑] 中文翻译者 HighGUI视频读写函数 目录 [隐藏] 1CvCapture 2c...

拔剑—浆糊的传说 191

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2565

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

HighGUI参考手册

简单图形界面地址:http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_highgui.cn.htm       cvNamedWindow 创建窗口 int cvNamedWindow( const char* name, int flags ); name 窗口的名字,它被用来区分不同的窗口,...

passball 922

无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程

当您遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息时,请按照上述步骤来解决问题。当您尝试加载文件C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1时,可能会遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息。请注意,更改执行策略可能会带来一些安全风险。

PixelInk的博客 1921

摄像头相关API

OPENCV中国  http://www.opencv.org.cn/index.php/HighGUI中文参考手册  HighGUI中文参考手册 HighGUI概述 简单图形界面 读取与保存图像 视频读写函数 实用函数与系统函数 [编辑] 中文翻译者 HighGUI视频读写函数 目录  [隐藏] 1 CvCapture 2 cvCre

zxg519的专栏 1149

Android 14.0 SystemUI状态栏居中显示时间和修改时间显示样式

在14.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了

安卓兼职framework和app工程师的博客 978

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

《学习OpenCV》 学习笔记

一、简介 1、OpenCV的特点 OpenCV可用于实时处理图像;具有良好的移植性;可以进行图像/视频载入、保存和采集的常规操作;具有低级和高级的应用程序接口(API)。 2、功能 (1)图像数据操作(内存分配与释放,图像复制、设定和转换) (2)图像/视频的输入输出(支持文件或摄像头的输入,图像/视频文件的输出) (3)矩阵/向量数据操作及线性代数运算(矩阵乘积、矩阵方程求解、特

录事参军 1886

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

OpenCV中的视频读取(1)(待补充)

首先是,OpenCV中与视频读取相关的HighGUI中的部分内容   来源:HighGUI参考手册http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_highgui.cn.htm 视频读写函数   视频获取结构 typedef struct CvCapture CvCapture;   结构Cv

u012601496的专栏 809

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

OpenCV+MFC显示图像/视频

http://www.cnblogs.com/Romi/archive/2012/05/07/2487652.html OpenCV中文网站上有讲怎么使用OpenCV读入和显示图像和视频 图像文件读入和显示:http://www.opencv.org.cn/index.php/%E5%9B%BE%E5%83%8F%E6%96%87%E4%BB%B6%E8%AF%BB%E5%85%A

机器视觉之家 1932

opencv修改摄像头参数

1、opencv相机参数列表 enum VideoCaptureProperties { CAP_PROP_POS_MSEC =0, //!< Current position of the video file in milliseconds. CAP_PROP_POS_FRAMES =1, //!< 0-based index of the frame to be decoded/captured next. CAP_P...

qq_40342287的博客 2324

opencv获取编码fourcc

#include #include #include using namespace std; int main(int argc, char** argv) { cv::VideoCapture cap(0); unsigned int f = (unsigned)cap.get(cv::CAP_PROP_FOURCC); char fourcc[] = { (char)f,

qq_15505637的博客 3180
上一篇: OpenCV参考手册之IplImage结构体
下一篇: 2014年5月5日开始的一周学习中遇到的问题与解答
R3
R3
博客等级 码龄15年 186粉丝 70原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值