OpenCV参考手册之摄像头
2014-05-08 17:43
267 查看
1、从摄像机读入数据
a)cvCreateCameraCapture(摄像设备ID):
只有存在多个摄像设备时,这个参数才起作用。默认值为-1,代表“随机选择一个”,自然,它更适合仅有一个摄像设备的情况。
cvCreateCameraCapture()同样返回相同的CvCapture指针,这使得我们后面可以完全类似于从视频流中获取帧的方法。为了便于开发工作,大多程序实时处理的程序同样会有视频文件读入模式,CvCapture结构的通用性使得这非常容易实现。
2、写入AVI视频文件
我们想将输入视频流或者捕获的图像序列记录到输出视频流中,OpenCV提供了一个简洁的方法来实现这个功能。可以创建一个捕获设备以便每次都能从视频流中提取一帧一样,我们同样可以创建一个写入设备以便逐帧将视频流写入视频文件。实现这个功能的函数是cvCreateVideoWriter()
当输出设备被创建之后,我们可以通过调用cvWriteFrame()逐帧将视频流写入文件。写入结束后,我们调用cvReleaseVideoWriter()来释放资源。
a)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('I','2','6','3')=H263I codec
CV_FOURCC('F','L','V','1')=FLV1 codec
若编码器代号为-1,则运行时会弹出一个编码器选择框
fps被创建视频流的帧率
frame_size 视频流的大小
is_color 如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)
函数cvCreateVideoWriter创建视频写入器结构
b) cvConvertImage
把一幅图像转换为另外一幅,并可以选择同时对其进行垂直翻转
void cvConvertImage(const CvArr* src,CvArr* dst,int flags=0);
src:输入图像
dst:目标图像,必须为单通道或者3通道8位图像。
flags:
操作标志:
CV_CVTIMG_FLIP - 垂直翻转图像
CV_CVTIMG_SWAP_RB - 交换红蓝通道。在OpenCV中,彩色图像的通道顺序是BGR然而在一些系统中,在显示图像之前通道顺序应该被翻转(cvShowImage能够自动转换)。
函数cvConvertImage转换一幅图像到另一幅图像,如果需要的话可以垂直翻转图像。这个函数被cvShowImage使用。
c) 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中寻找逆变换。
以下为转载的内容:http://hi.baidu.com/yuzaihuan/item/dc72f5e1188642314ddcaf03
(x,y)平面内尺寸的差异被转换为数极坐标平面内沿着Log(r)轴的位移,旋转差异被转换成对数极坐标平面内沿Sita轴的位移
看下面的例子:(当你修改atof('这里面的值')的时候,出现的图像会发生变化)
a)cvCreateCameraCapture(摄像设备ID):
只有存在多个摄像设备时,这个参数才起作用。默认值为-1,代表“随机选择一个”,自然,它更适合仅有一个摄像设备的情况。
cvCreateCameraCapture()同样返回相同的CvCapture指针,这使得我们后面可以完全类似于从视频流中获取帧的方法。为了便于开发工作,大多程序实时处理的程序同样会有视频文件读入模式,CvCapture结构的通用性使得这非常容易实现。
2、写入AVI视频文件
我们想将输入视频流或者捕获的图像序列记录到输出视频流中,OpenCV提供了一个简洁的方法来实现这个功能。可以创建一个捕获设备以便每次都能从视频流中提取一帧一样,我们同样可以创建一个写入设备以便逐帧将视频流写入视频文件。实现这个功能的函数是cvCreateVideoWriter()
当输出设备被创建之后,我们可以通过调用cvWriteFrame()逐帧将视频流写入文件。写入结束后,我们调用cvReleaseVideoWriter()来释放资源。
a)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('I','2','6','3')=H263I codec
CV_FOURCC('F','L','V','1')=FLV1 codec
若编码器代号为-1,则运行时会弹出一个编码器选择框
fps被创建视频流的帧率
frame_size 视频流的大小
is_color 如果非零,编码器将希望得到彩色帧并进行编码;否则,是灰度帧(只有在Windows下支持这个标志)
函数cvCreateVideoWriter创建视频写入器结构
b) cvConvertImage
把一幅图像转换为另外一幅,并可以选择同时对其进行垂直翻转
void cvConvertImage(const CvArr* src,CvArr* dst,int flags=0);
src:输入图像
dst:目标图像,必须为单通道或者3通道8位图像。
flags:
操作标志:
CV_CVTIMG_FLIP - 垂直翻转图像
CV_CVTIMG_SWAP_RB - 交换红蓝通道。在OpenCV中,彩色图像的通道顺序是BGR然而在一些系统中,在显示图像之前通道顺序应该被翻转(cvShowImage能够自动转换)。
函数cvConvertImage转换一幅图像到另一幅图像,如果需要的话可以垂直翻转图像。这个函数被cvShowImage使用。
c) 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中寻找逆变换。
以下为转载的内容:http://hi.baidu.com/yuzaihuan/item/dc72f5e1188642314ddcaf03
(x,y)平面内尺寸的差异被转换为数极坐标平面内沿着Log(r)轴的位移,旋转差异被转换成对数极坐标平面内沿Sita轴的位移
看下面的例子:(当你修改atof('这里面的值')的时候,出现的图像会发生变化)
#include"stdafx.h" #include"highgui.h" #include"cv.h" int _tmain(int argc, _TCHAR* argv[]) { IplImage* src; double M; printf("1111111111111111111111111111111111111111111111"); if(((src=cvLoadImage("lena.jpg",1))!=0)) { M=atof("1"); IplImage* dst=cvCreateImage(cvGetSize(src),8,3); IplImage* src2=cvCreateImage(cvGetSize(src),8,3); cvLogPolar(src,dst,cvPoint2D32f(src->width /4,src->height /2),M,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS); cvLogPolar(dst,src2,cvPoint2D32f(src->width /4,src->height /2),M,CV_INTER_LINEAR+CV_WARP_INVERSE_MAP); cvNamedWindow("log-polar",1); cvShowImage("log-polar",dst); cvNamedWindow("inverse log-polar",1); cvShowImage("inverse log-polar",src2); cvWaitKey(0); } return 0; }中心点是(width/4,height/2) M=1
相关文章推荐
- OpenCV参考手册之Mat类详解(二)
- OpenCV参考手册之Canny边缘检测
- OpenCV参考手册之Mat类详解1
- OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解(二)
- OpenCV参考手册之Mat类详解2
- 【转】OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解1
- cvThreshold用法(opencv参考手册)
- OpenCV参考手册之Mat类详解(三)
- OpenCV参考手册之Mat类详解2
- cvAdaptiveThreshold用法(opencv参考手册)
- OpenCV参考手册之Mat类详解
- cvCanny用法(opencv参考手册)
- OpenCV参考手册之Mat类详解1
- cvCanny用法(opencv参考手册)
- OpenCV 之 HighGUI 参考手册
- OpenCV参考手册之Mat类详解(二)
- OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解(一)