1. cvSetCaptureProperty
设置视频获取属性,
函数cvSetCaptureProperty设置指定视频获取的属性。目前这个函数对视频文件只支持: CV_CAP_PROP_POS_MSEC, CV_CAP_PROP_POS_FRAMES, CV_CAP_PROP_POS_AVI_RATIO
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 属性的值。
2.
cvGetCaptureProperty
double cvGetCaptureProperty ( CvCapture* capture, int property_id ); //capture 视频获取结构, property_id 属性标识。
OpenCV中属性的一些宏定义:
#define CV_CAP_PROP_POS_MSEC 0
#define CV_CAP_PROP_POS_FRAMES 1
#define CV_CAP_PROP_POS_AVI_RATIO 2
#define CV_CAP_PROP_FRAME_WIDTH 3
#define CV_CAP_PROP_FRAME_HEIGHT 4
#define CV_CAP_PROP_FPS 5
#define CV_CAP_PROP_FOURCC 6
#define CV_CAP_PROP_FRAME_COUNT 7
#define CV_CAP_PROP_FORMAT 8
#define CV_CAP_PROP_MODE 9
#define CV_CAP_PROP_BRIGHTNESS 10
#define CV_CAP_PROP_CONTRAST 11
#define CV_CAP_PROP_SATURATION 12
#define CV_CAP_PROP_HUE 13
#define CV_CAP_PROP_GAIN 14
#define CV_CAP_PROP_EXPOSURE 15
#define CV_CAP_PROP_CONVERT_RGB 16
#define CV_CAP_PROP_WHITE_BALANCE 17
#define CV_CAP_PROP_RECTIFICATION 18
注意:
通过创建一个Capture对象的指针后,调用 cvGetCaptureProperty 即可获取上述任何相关属性;但是我们不能太依赖这个函数;比如我们想获取一段视频的帧数,我们就不能太依赖于CV_CAP_PROP_FRAME_COUNT这个属性;因为 cvGetCaptureProperty 对属性的访问,其实访问的是关联视频文件的文件头信息,并不是真正去访问了视频的图像数据,这就带来一个问题:我们在讲其他视频格式转换为 AVI 格式的时候,图像帧数并没改变,只是视频文件头改变了,这时直接通过get函数读取的信息就可能不准确;最好的办法是迭代从视频中取出一帧,检查是否有数据,来确定该视频文件的总共帧数。
3. cvCreateTrackbar
该函数为开放计算机视觉(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的显示位置。
cvGetTrackbarPos
该函数为开放计算机视觉(OpenCV)库中
库函数
,用来获取trackbar的位置。
定义:
int cvGetTrackbarPos( const char* trackbar_name, const char* window_name );
参数:
trackbar_name trackbar的名字
window_name trackbar父窗口的名字
函数cvGetTrackbarPos返回指定trackbar的当前位置
4. cvCreateVideoWriter
函数cvCreateVideoWriter 创建视频写入器结构。
typedef struct CvVideoWriter CvVideoWriter;
CvVideoWriter* cvCreateVideoWriter ( const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1 );
其中,各参数意义如下:filename 输出视频文件名。
fourcc为 四个字符,用来表示压缩帧的codec 例如:
CV_FOURCC('P','I','M','1') = MPEG-1 codec
CV_FOURCC('M','J','P','G') = motion-jpeg codec
CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
CV_FOURCC('U', '2', '6', '3') = H263 codec
CV_FOURCC('I', '2', '6', '3') = H263I codec
CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
若编码器代号为 -1,则运行时会弹出一个编码器选择框.
is_color 如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)。
5. cvLogPolar
此函数模仿人类视网膜中央凹视力,并且对于目标跟踪等可用于快速尺度和旋转变换不变模板匹配。
void cvLogPolar( const CvArr* src, CvArr* dst, CvPoint2D32f center, double M, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS );
src 输入
图像
。 dst 输出
图像
。 center 变换的中心,输出
图像
在这里最精确。 M 幅度的尺度参数,见下面公式。 flags 插值方法和以下选择标志的结合
CV_WARP_FILL_OUTLIERS -填充输出图像所有像素,如果这些点有和外点对应的,则置零。
CV_WARP_INVERSE_MAP - 表示矩阵由输出图像到输入图像的逆变换,并且因此可以直接用于像素插值。否则,函数从map_matrix中寻找逆变换。
fillval 用于填充外点的值。
函数cvLogPolar用以下变换变换输入图像:
正变换 (CV_WARP_INVERSE_MAP 未置位):
dst(phi,rho)<-src(x,y)
逆变换 (CV_WARP_INVERSE_MAP 置位):
dst(x,y)<-src(phi,rho),
这里,
rho=M * log(sqrt(x^2+y^2))
phi=atan(y/x)