Ошибка cvCalcOpticalFlowBM

Я пытался использовать OpenCVs cvCalcOpticalFlowBM для расчета оптического потока в моем приложении. Я делаю что-то похожее на:

IplImage* velX1 = cvCreateImage(cvSize((beforeGray->width - blockSize.width + shiftSize.width)/shiftSize.width, (beforeGray->height - blockSize.height + shiftSize.height)/shiftSize.height), IPL_DEPTH_32F,1);
IplImage* velY1 = cvCreateImage(cvSize((beforeGray->width - blockSize.width + shiftSize.width)/shiftSize.width, (beforeGray->height - blockSize.height + shiftSize.height)/shiftSize.height), IPL_DEPTH_32F,1);
IplImage* velX2 = cvCreateImage(cvSize((beforeGray->width - blockSize.width + shiftSize.width)/shiftSize.width, (beforeGray->height - blockSize.height + shiftSize.height)/shiftSize.height), IPL_DEPTH_32F,1);
IplImage* velY2 = cvCreateImage(cvSize((beforeGray->width - blockSize.width + shiftSize.width)/shiftSize.width, (beforeGray->height - blockSize.height + shiftSize.height)/shiftSize.height), IPL_DEPTH_32F,1);

cvSetZero(velX1);
cvSetZero(velY1);
cvSetZero(velX2);
cvSetZero(velY2);

cvCalcOpticalFlowBM(beforeGray, afterGray, 1, blockSize, shiftSize, range, 0, velX1, velY1);

beforeGray и afterGray - это одноканальные изображения IPL_DEPTH_8U одинакового размера. Но при выполнении последней строки я получаю следующее исключение:

OpenCV Error: Null pointer (NULL array pointer is passed) in cvGetMat

Я использую OpenCV 2.4, и я не могу понять, почему это не работает. Я проверил через отладчик, что все входные аргументы не являются нулевыми. У кого-нибудь есть идеи?

1 ответ

Похоже, я неправильно понял аргументы. Должно быть:

cvCalcOpticalFlowBM(beforeGray, afterGray, blockSize, shiftSize, range, 0, velX1, velY1);
Другие вопросы по тегам