OpenCV碰到如下问题:

hust259 2014-04-18 08:16:19
void Initialize(CvCapture *pCap, float *vibe_samples, int rWidth, int rHeight, bool resizeFlag)
{
int vibe_color_raidus = 20;
int vibe_subsample_factor = 16;
if (pCap == NULL || vibe_samples == NULL)
return;
IplImage *pBgrFrame = cvQueryFrame(pCap);//这一句不知道为什么赋值,有点问题,直接导致后面一句
。。。。。。。。。
pGrayFrame = cvCreateImage(cvSize(pBgrFrame->width, pBgrFrame->height), IPL_DEPTH_8U, 1);//参见第二张图,可以看见pBgrFrame里面相关项目的值根本没有,没办法创建图像。。。

因为pBgrFrame赋值之后。两张图说明问题。



第一张是在IplImage *pBgrFrame = cvQueryFrame(pCap),之前pCap没有问题,相关数据都是正常,但是 cvQueryFrame之后得到的pBgrFrame ,所有数据都没有。。。导致了后面的错误。

所以我想问,我错在哪儿???
...全文
255 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hust259 2014-04-22
  • 打赏
  • 举报
回复
引用 5 楼 wangting627 的回复:
pCapture = cvCreateFileCapture("C:\\videolongxvid.avi"); if (pCapture==NULL) { AfxMessageBox(_T("找不到视频文件!")); } double fps=cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS ); //读取视频的帧率 pFrame= cvQueryFrame(pCapture); if (pFrame==NULL) break; 反正我以前是这么写的。。
你可以调试一下看 pFrame= cvQueryFrame(pCapture);这句 结束之后 pFrame的状态。 我程序与OpenCV相关的程序步骤也和《学习OpenCV》例程一样。 像你这个一样,先 pCapture = cvCreateFileCapture("C:\\videolongxvid.avi"); 再pFrame= cvQueryFrame(pCapture); 除了没那两个判断,其实我感觉判断也不必要,一般cvCreateFileCapture除非文件本身有问题否则一般不会失败,后面这个我调试也能看出来,但是这两步是《学习OpenCV》播放器例程一样的步骤,但是怎么就有错呢。我一学长也说这应该是不会出错的。而且我调试添加语句cvGetCaptureProperty获取的pCap属性完全正常,照理说下面pFrame= cvQueryFrame(pCap); 也应该不会有错。但偏偏它就有错。我也不知道怎么办。
hust259 2014-04-22
  • 打赏
  • 举报
回复
引用 4 楼 relaxisland 的回复:
[quote=引用 3 楼 alex159s 的回复:] [quote=引用 2 楼 relaxisland 的回复:] 代码 没看出问题 vQueryFrame 有源码的啊, 但是 几乎调用的都是系统api 你这个pCap 是 读取文件的,还是 摄像头的
文件[/quote] 应该不是你文件的问题吧? [/quote]不是。这个可以用LearningOpenCV上面的播放器例程播放。
不败的拿破仑 2014-04-22
  • 打赏
  • 举报
回复
pCapture = cvCreateFileCapture("C:\\videolongxvid.avi"); if (pCapture==NULL) { AfxMessageBox(_T("找不到视频文件!")); } double fps=cvGetCaptureProperty(pCapture, CV_CAP_PROP_FPS ); //读取视频的帧率 pFrame= cvQueryFrame(pCapture); if (pFrame==NULL) break; 反正我以前是这么写的。。
relaxisland 2014-04-22
  • 打赏
  • 举报
回复
引用 3 楼 alex159s 的回复:
[quote=引用 2 楼 relaxisland 的回复:] 代码 没看出问题 vQueryFrame 有源码的啊, 但是 几乎调用的都是系统api 你这个pCap 是 读取文件的,还是 摄像头的
文件[/quote] 应该不是你文件的问题吧?
relaxisland 2014-04-20
  • 打赏
  • 举报
回复
代码 没看出问题 vQueryFrame 有源码的啊, 但是 几乎调用的都是系统api 你这个pCap 是 读取文件的,还是 摄像头的
hust259 2014-04-20
  • 打赏
  • 举报
回复
引用 2 楼 relaxisland 的回复:
代码 没看出问题 vQueryFrame 有源码的啊, 但是 几乎调用的都是系统api 你这个pCap 是 读取文件的,还是 摄像头的
文件
hust259 2014-04-20
  • 打赏
  • 举报
回复
手动置顶一次。。。。求人解答,自己怀疑是cvQueryFrame函数的问题,导致这个赋值出了问题。。但是查不到这个函数源码,没法进行分析。。可以通过源码查看这个函数的赋值情况。
SGBM算法的密集匹配SGBM算法介绍 在OpenCV中使用函数StereoSGBM ( ) 实现了SGBM算法。SGBM 算法核心步骤为:选取匹配基元;构建基于多个方向的扫描线的代价能量和函数;求取能量代价和函数的最优解。OpenCV中SGMB算法的实现主要分为以下四个步骤: ①预处理 SGBM采用水平Sobel算子,把图像做处理,然后用一个函数将经过水平Sobel算子处理后的图像上每个像素点(P表示其像素值)映射成一个新的图像,表示新图像上的像素值。映射函数如下: preFilterCap为一个常数参数,openCv默认取15。预处理实际上是得到图像的梯度信息。经预处理的图像保存起来,将会用于计算代价。 ②代价计算 代价有两部分组成:经过预处理得到的图像的梯度信息经过基于采样的方法得到的梯度代价;原图像经过基于采样的方法得到的SAD代价。 ③动态规划 用一维约束近似二维约束。在P的周围,以 45°为间隔设置了8个路径。通过8个路径计算最小代价路径,以此来近似二维约束匹配计算. 其中动态规划很重要两个参数P1,P2是这样设定的: P1 =8*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; P2 = 32*cn*sgbm.SADWindowSize*sgbm.SADWindowSize; cn是图像的通道数, SADWindowSize是SAD窗口大小,数值为奇数。可以看出,当图像通道和SAD窗口确定下来,SGBM的规划参数P1和P2是常数。 ④后处理 openCvSGBM的后处理包含以下几个步骤: Step1:唯一性检测:视差窗口范围内最低代价是次低代价的(1 + uniquenessRatio/100)倍时,最低代价对应的视差值才是该像素点的视差,否则该像素点的视差为0。其中uniquenessRatio是一个常数参数。 Step2:亚像素插值 Step3:左右一致性检测:误差阈值disp12MaxDiff默认为1,可以自己设置。 获得深度信息 经过sgbm->compute(rectifyImageL, rectifyImageR, disp)获得视差映射后,利用式(2),式(3) ,通过简单的矩阵相乘就可提取深度信息。三维坐标就是( X /W,Y/W,Z /W) 。OpenCV中使用reprojectImageTo3D( )函数实现该功能,该函数输入上面得到的视差数据,输出所需的三维点阵,然后提取深度信息。 SGBM参数设置:(在下面的程序中已经标明) MinDisparity设置为0,因为两个摄像头是前向平行放置,相同的物体在左图中一定比在右图中偏右。如果为了追求更大的双目重合区域而将两个摄像头向内偏转的话,这个参数是需要考虑的。 UniquenessRatio主要可以防止误匹配,此参数对于最后的匹配结果是有很大的影响。立体匹配中,宁愿区域无法匹配,也不要误匹配。如果有误匹配的话,碰到障碍检测这种应用,就会很麻烦。该参数不能为负值,一般5-15左右的值比较合适,int型。 BlockSize:SAD窗口大小,容许范围是[5,255],一般应该在 5x5..21x21 之间,参数必须为奇数值, int型。 NumDisparities:视差窗口,即最大视差值与最小视差值之差,窗口大小必须是 16的整数倍,int型。 在SGBM算法的参数中,对视差生成效果影响较大的主要参数是BlockSize、NumDisparities和UniquenessRatio三个,一般只需对这三个参数进行调整,其余参数按默认设置即可。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧