JavaCV拼接

时间:2012-06-21 07:42:38

标签: opencv javacv image-stitching

我试图在Java中使用JavaCV 0.1和OpenCV 2.4.0缝合多个图像,我使用此代码拼接图像:

stitcher = Stitcher.createDefault(false);

MatVector images = new MatVector(imageN.size());
for(...){
   CvArr image = cvLoadImage(imageN);
   images.put(index,image);
}

MatVector result = new MatVector(1);
int status = stitcher.stitch(images,result);

if( status == stitcher.OK )
{
   cvSaveImage(result.getIplImage(0));
}

注1:本例中的加载图像是拼接的有效图像。

注2:代码的C ++版本在当前配置上运行时没有问题

在stitcher.stitch方法中,opencv会抛出一个断言异常,例如“k == MAT”。我该如何解决这个问题? MatVector用法在此示例代码中是否正确?

...谢谢

1 个答案:

答案 0 :(得分:1)

我发现它,这是一个与JavaCv相关的错误。

实际上JavaCv并不是有罪的.OpenCV stitcher API使用cv :: OutputArray来返回拼接图像,但是这个方法在执行时将cv :: OutputArray强制转换为cv :: Mat。 JavaCV仅通过使用参数接口来接入OpenCV方法,因此它将参数转换为std :: vector,这会导致断言失败。

需要将std :: vector转换为Mat才能使其正常工作。我不知道这种转换是否存在任何其他方式,但是只有lib的作者可以修复它。

据说c ++版本正在运行,但事实上,当pano参数作为cv :: Mat给出时它正在工作,当输入std :: vector时它会再次给出相同的失败断言。