2014-02-15 3 views
0

Я хочу рассчитать оптический поток, используя функцию cvcalcopticalflowBM в opencv 2.4.7 Когда я выполнил приведенный ниже код. Сообщение об ошибке «Размеры входных аргументов не Macth() в cvcalcopticalflowbmРазмеры входных аргументов не совпадают в cvcalcopticalflowbm opencv 2.4.7

Я не понимаю, почему это. Пожалуйста, помогите мне. Спасибо заранее.

#define BS 5 

IplImage *imgA = NULL, *imgB = NULL; 
IplImage *grayA = NULL, *grayB = NULL; 
IplImage *velx = NULL, *vely = NULL; 
IplImage *result = NULL; 
imgA = cvLoadImage("00.jpg", 1); 
imgB = cvLoadImage("01.jpg", 1); 
grayA = cvCreateImage(cvGetSize(imgA), IPL_DEPTH_8U, 1); 
grayB = cvCreateImage(cvGetSize(imgA), IPL_DEPTH_8U, 1); 

cvCvtColor(imgA, grayA, CV_BGR2GRAY); 
cvCvtColor(imgB, grayB, CV_BGR2GRAY); 

CvSize size = cvGetSize(imgA); 
size.width /= BS; 
size.height /= BS; 
result = cvCreateImage(size, IPL_DEPTH_8U, 1); 
for (int i=0; i<size.height; i++) { 
    for (int j=0; j<size.width; j++) { 
     cvSet(result, CV_RGB(255,255,255), NULL); 
    } 
} 
velx = cvCreateImage(size, IPL_DEPTH_32F, 1); 
vely = cvCreateImage(size, IPL_DEPTH_32F, 1); 
cvCalcOpticalFlowBM(grayB, grayA, cvSize(BS, BS), cvSize(1, 1), cvSize(1, 1), 0, velx, vely); 
// 
cvNamedWindow("HorFlowBM", CV_WINDOW_AUTOSIZE); 
cvShowImage("HorFlowBM", velx); 
cvNamedWindow("VerFlowBM", CV_WINDOW_AUTOSIZE); 
cvShowImage("VerFlowBM", vely); 
for (int i=0; i<size.height; i+=2) { 
    for (int j=0; j<size.width; j+=2) { 
     int dx = (int)cvGetReal2D(velx, i, j); 
     int dy = (int)cvGetReal2D(vely, i, j); 
     cvLine(result, cvPoint(j, i), cvPoint(j+dx, i+dy), CV_RGB(0,0,0), 1, 8, 0); 
    } 
} 
cvNamedWindow("OpticalFlow", CV_WINDOW_AUTOSIZE); 
cvShowImage("OpticalFlow", result); 
cvWaitKey(0); 

ответ

0

Вы уверены, что входные изображения загружаются. Попробуйте показать их после загрузки их, например, cvShowImage("input1", imgA);. Также попробуйте напечатать размер обоих изображений, чтобы проверить, что размер обоих изображений одинаковый.

+0

Я уверен, что загружены imgA и imgB. Они имеют одинаковый размер. – user2745692

+0

И когда я выполнил эту программу. Он всегда замечает, что память исключений в строке cvCalcOpticalFlowBM (grayB, grayA, cvSize (BS, BS), cvSize (1, 1), cvSize (1, 1), 0, velx, vely); – user2745692

0

Я узнал эту ошибку. Размер velx и vely должно быть

CvSize velSize = 
{ 
    (grayA->width - BLOCK_SIZE + SHIFT_SIZE)/SHIFT_SIZE, 
    (grayA->height - BLOCK_SIZE + SHIFT_SIZE)/SHIFT_SIZE 
}; 

Правильно, когда выполняются программы

Смежные вопросы