cvcalcopticalflowbm opencv 2.4.7 中输入参数的大小不匹配

Posted

技术标签:

【中文标题】cvcalcopticalflowbm opencv 2.4.7 中输入参数的大小不匹配【英文标题】:Sizes of input arguments do not match in cvcalcopticalflowbm opencv 2.4.7 【发布时间】:2014-02-15 07:08:45 【问题描述】:

我想在 opencv 2.4.7 中使用 cvcalcopticalflowBM 函数计算光流 当我编译下面的代码时。错误消息是“输入参数的大小在 cvcalcopticalflowbm 中不是 macth()

我不明白为什么会这样。请帮我。提前谢谢。

#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);

【问题讨论】:

【参考方案1】:

您确定输入图像正在加载吗?加载后尝试显示它们,即cvShowImage("input1", imgA);。另外,尝试打印两个图像的大小以检查两个图像的大小是否相同。

【讨论】:

我确定 imgA 和 imgB 已加载。它们的大小相同。 当我遵守这个程序时。它总是注意到 cvCalcOpticalFlowBM(grayB, grayA, cvSize(BS, BS), cvSize(1, 1), cvSize(1, 1), 0, velx, vely); 行的异常内存;【参考方案2】:

我发现了这个错误。 velx 和 vely 的大小应该是

CvSize velSize =

    (grayA->width - BLOCK_SIZE + SHIFT_SIZE)/SHIFT_SIZE,
    (grayA->height - BLOCK_SIZE + SHIFT_SIZE)/SHIFT_SIZE
;

编译程序就正确了

【讨论】:

以上是关于cvcalcopticalflowbm opencv 2.4.7 中输入参数的大小不匹配的主要内容,如果未能解决你的问题,请参考以下文章

学习 opencv---(11)OpenC 边缘检测:Canny算子,Sobel算子,Laplace算子,Scharr滤波器

unity里怎么使用zxing

UG NX二次开发(C#)-建模-计算两个组件之间的距离(最小值和定位点距离)

游标的使用

读写文件

未生成错误消息