OpenCV设置摄像头的分辨率(转-根据自己的改写)

http://hi.baidu.com/maxint/blog/item/564f2913d2005b25dc54013e.html

 

opencv安装方法:http://www.opencv.org.cn/index.php/VC6%E4%B8%8B%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE

 

[zz]OpenCV设置摄像头的分辨率

20080814 星期四 下午 07:22

原出处

OpenCV中原本是有设置视频捕捉属性的函数的,如下:

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

//cvSetCaptureProperty(pCapture, CV_CAP_PROP_FPS, 30);

//cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH, 1024);

//cvSetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT, 768);

不过我用了之后没效果,就google到这篇文章了,也仅此一篇,实践过可行,源码也蛮清楚的,保存下。

查看文档,opencv1目前还不支持,只留了接口


Opencv是提供了一系列的摄像头设置函数的,但是没有提供相应的实现,使用的话,需要如下设置:

1 把下面几个定义添加到 highgui.hC:\Program Files\OpenCV\otherlibs\highgui)中

#define CV_CAP_PROP_DIALOG_DISPLAY 8

#define CV_CAP_PROP_DIALOG_FORMAT 9

#define CV_CAP_PROP_DIALOG_SOURCE 10

#define CV_CAP_PROP_DIALOG_COMPRESSION 11

#define CV_CAP_PROP_FRAME_WIDTH_HEIGHT 12

2 把页面中的函数

static int icvSetPropertyCAM_VFW( CvCaptureCAM_VFW* capture, int property_id, double value )【看下面补充函数体

添加到cvcap_vfw.cpp中,放在typedef struct CvCaptureCAM_VFW 这个结构之后。(见下文)

3 用下面的函数代替cvcap_vfw.cpp中的同名函数

static CvCaptureVTable captureCAM_VFW_vtable =

{

    6,

    (CvCaptureCloseFunc)icvCloseCAM_VFW,

    (CvCaptureGrabFrameFunc)icvGrabFrameCAM_VFW,

    (CvCaptureRetrieveFrameFunc)icvRetrieveFrameCAM_VFW,

    (CvCaptureGetPropertyFunc)icvGetPropertyCAM_VFW,

    (CvCaptureSetPropertyFunc)icvSetPropertyCAM_VFW, // was NULL  原来此处代码为0

    (CvCaptureGetDescriptionFunc)0

};

4 编译highgui

注:first use win32 Debug mode to build highgui, then use release mode to rebuild it

 

 

用的时候调用如下函数即可

cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH_HEIGHT, 640480 )

补充,需要的函数:

static int icvSetPropertyCAM_VFW( CvCaptureCAM_VFW* capture, int

    property_id, double value )

{

    int result = -1;

    CAPSTATUS capstat;

    CAPTUREPARMS capparam;

    BITMAPINFO btmp;

 

    switch( property_id )

    {

    case CV_CAP_PROP_DIALOG_DISPLAY:

        result = capDlgVideoDisplay(capture->capWnd);

        //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEODISPLAY,0,0);

        break;

    case CV_CAP_PROP_DIALOG_FORMAT:

        result = capDlgVideoFormat(capture->capWnd);

        //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEOFORMAT,0,0);

        break;

    case CV_CAP_PROP_DIALOG_SOURCE:

        result = capDlgVideoSource(capture->capWnd);

        //SendMessage(capture->capWnd,WM_CAP_DLG_VIDEOSOURCE,0,0);

        break;

    case CV_CAP_PROP_DIALOG_COMPRESSION:

        result = capDlgVideoCompression(capture->capWnd);

        break;

    case CV_CAP_PROP_FRAME_WIDTH_HEIGHT:

        capGetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));

        btmp.bmiHeader.biWidth = floor(value/1000);

        btmp.bmiHeader.biHeight = value-floor(value/1000)*1000;

        btmp.bmiHeader.biSizeImage = btmp.bmiHeader.biHeight *

        btmp.bmiHeader.biWidth * btmp.bmiHeader.biPlanes *

        btmp.bmiHeader.biBitCount / 8;

        capSetVideoFormat(capture->capWnd, &btmp, sizeof(BITMAPINFO));

        break;

    default:

        break;

    }

 

    return result;

}

 

 

碰到问题的解决:


1
VC 6.0中怎样设置才能生成DebugRelease版本的程序?

 

  vc右上角菜单栏或工具栏的空白处右键,选上Build项,使build工具栏可见,在Build工具栏上就可以选择工程的DebugRelease版本。

 

或者菜单栏Build->Batch Build,在弹出的对话框中选择编译哪个版本,或者两个版本都编译。

 

2 找不到long  PR 类似错误:(在XP中可能需要改动  win7不要这么改!)

 

C:\Program Files\OpenCV\otherlibs\highgui\window_w32.cpp 

为了防止中间部分编译

#if defined WIN64 || defined EM64T修改为:  #if defined WIN64y999 || defined EM64Ty999


3.把编译好的bin覆盖。。。。。

转载于:https://www.cnblogs.com/tianxuyuan/archive/2011/08/23/2151335.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值