我试图在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用法在此示例代码中是否正确?
...谢谢
答案 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时它会再次给出相同的失败断言。