ce下摄像头的视频捕获的分辨率问题???

gcj19870623   2009-2-16 20:44 楼主
我的手机是200万象素的,照相摄影的时候分辨率还是蛮好的。。
但是摄像的时候,分辨率只有120×160了,郁闷啊。。
我是用Directshow来采集数据的。。。
枚举视频格式的代码如下:
  1. hr = m_pCaptureBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
  2.                         &MEDIATYPE_Video,
  3.                         m_pFilterVideoCap, IID_IAMStreamConfig, (void **)&m_pAMStreamConfig);
  4.                 int iCount = 0, iSize = 0;
  5.                 hr = m_pAMStreamConfig->GetNumberOfCapabilities(&iCount, &iSize);
  6.                 if (iSize == sizeof(VIDEO_STREAM_CONFIG_CAPS))
  7.                 {
  8.                         // Use the video capabilities structure.
  9.                         for (int iFormat = 0; iFormat < iCount; iFormat++)
  10.                         {
  11.                                 VIDEO_STREAM_CONFIG_CAPS scc;
  12.                                 AM_MEDIA_TYPE *pAMMT = NULL;
  13.                                 hr = m_pAMStreamConfig->GetStreamCaps(iFormat, &pAMMT, (BYTE*)&scc);
  14.                                 VIDEOINFOHEADER   *pVih   =   (VIDEOINFOHEADER*)pAMMT->pbFormat;   
  15.                                 pVih->bmiHeader.biWidth   =   120;
  16.                                 pVih->bmiHeader.biHeight   =  160;  
  17.                                 pVih->bmiHeader.biSizeImage   =   pVih->bmiHeader.biWidth*pVih->bmiHeader.biHeight*pVih->bmiHeader.biBitCount/8;// DIBSIZE(pVih->bmiHeader);
  18.                                 pVih->AvgTimePerFrame   =   scc.MinFrameInterval;   
  19.                                 //设置媒体类型   
  20.                                 hr   =   m_pAMStreamConfig->SetFormat(pAMMT);   
  21.                                 DeleteMediaType(pAMMT);
  22.                         }
  23.                 }


发现只有120×160这一种格式,要是我设置240×320酒会出错的。。
但我从网上下了一个软件Webcamera Plus是能捕获到240×320的视频的。。。
大家可知道,还有啥方法能设置视频的分辨率啊???

回复评论 (13)

是不是采样间隔太短了
点赞  2009-2-16 21:36
驱动怎么写的啊
点赞  2009-2-16 21:50
采用间隔太短??啥意思啊??是不是分辨率高了后,帧率要调低点。。
还有驱动我没写,也不会写,应当是摄像头自带的驱动。。。
点赞  2009-2-17 08:51
学习
点赞  2009-2-17 09:06
还没解决,郁闷??顶顶,希望大家有好的建议。。。
点赞  2009-2-26 20:33
学习!
点赞  2009-2-27 17:35
这里一般驱动里面都分别为preview capture 列举了几种长宽比的
你的参数下来,它首先是比较你的长宽和他所列举的长宽是否一致,如果不一致会返回错误
并不是你想设一个怎样的长和宽都可以的
点赞  2009-2-28 08:23
发现只有120×160这一种格式,要是我设置240×320酒会出错的。。
但我从网上下了一个软件Webcamera Plus是能捕获到240×320的视频的。。。

这说明你的Camera和显示驱动是没问题的,我觉得应该是你上层应用程序的问题
点赞  2009-2-28 10:40
楼上讲的大家都知道,哈哈
点赞  2009-3-2 14:08
代码的逻辑好像就是设置为支持格式的最后一种,前面的设置都被覆盖了.
应该判断得到的格式是否和你要用的格式一样,如果一样就使用这种格式,然后break;

  hr   =   m_pAMStreamConfig->SetFormat(pAMMT);
这地方的hr是否成功?
如果当前的pAMMT里结构的其它成员与你要使用的格式冲突,这样设置是否失败,导致只能使用默认格式?

点赞  2009-3-3 14:20
引用: 引用 9 楼 lanmanck 的回复:
楼上讲的大家都知道,哈哈


哈哈,多谢支持
点赞  2009-3-5 14:21
估计你摄像头不是200万像素的,有些摄像头软件提高分辨率是通过插值法得到的,根本不是真正的搞分辨率。
一般驱动提供的只是硬件实际分辨率。
点赞  2009-3-6 14:42
楼主的问题,应该跟底层的驱动的配合有一定关系。
就像8楼说的,驱动没问题,显示没问题。。。
楼主用WEBCAMERA也没问题,
但是底层的驱动应该是给每个功能的接口是不一致的,
比如webcamera的时候,你使用了QVGA(320*240),那么底层驱动给webcamera的接口肯定有QVGA(320*240),
那么你的摄像,如果底层驱动只给了一个120×160的接口,那么你只有这么多的数据可以接受,那就会出这种楼主说的这种现象。

所以楼主要修改摄像的话,肯定需要先去查底层驱动给摄像的接口(其实驱动的接口肯定已经在了,楼主要查的是有没有调用到那个接口而已),然后再查接受到图像数据之后的编码程序的接口,然后再看上层剩余要查的细节。。。
点赞  2009-3-8 15:40
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复