|
继上一次2.0版本的时间轴问题后,本人在使用2.0版本时发现又一新问题:
如下是2.0版本光流代码一部分:
cvCalcOpticalFlowBM( const void* srcarrA, const void* srcarrB,
CvSize blockSize, CvSize shiftSize,
CvSize maxRange, int usePrevious,
void* velarrx, void* velarry )
{
CvMat stubA, *srcA = cvGetMat( srcarrA, &stubA );
CvMat stubB, *srcB = cvGetMat( srcarrB, &stubB );
CvMat stubx, *velx = cvGetMat( velarrx, &stubx );
CvMat stuby, *vely = cvGetMat( velarry, &stuby );
if( !CV_ARE_TYPES_EQ( srcA, srcB ))
CV_Error( CV_StsUnmatchedFormats, "Source images have different formats" );
if( !CV_ARE_TYPES_EQ( velx, vely ))
CV_Error( CV_StsUnmatchedFormats, "Destination images have different formats" );
CvSize velSize =
{
(srcA->width - blockSize.width)/shiftSize.width,
(srcA->height - blockSize.height)/shiftSize.height
};
if( !CV_ARE_SIZES_EQ( srcA, srcB ) ||
!CV_ARE_SIZES_EQ( velx, vely ) ||
velx->width != velSize.width ||
vely->height != velSize.height )
CV_Error( CV_StsUnmatchedSizes, "" );......
由于问题出现在红色部分,查看之后发现velx->width != velSize.width 成了导致cverror,查看srcA->width 的值发现为异常的值,最终追踪到CvMat stubA, *srcA = cvGetMat( srcarrA, &stubA );函数中,其中发现传入的&stubA ,还有cvGetMat返回的srcA的值都有异常,查看cvGetMat后发现该函数变化并不大,只是一些小的命名差别。
很奇怪的问题就是为何返回的值与期望的不同,为什么1.0底下光流函数运行正常。是否有朋友遇到同样的问题,如果用过2.0库中光流函数的朋友跑通的话,麻烦给我解答此问题,谢谢。 |
|