OpenCV参考手册之摄像头

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('这里面的值')的时候,出现的图像会发生变化)

#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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值