提问者:小点点

JavaCV缝合


我正在尝试使用JavaCV 0.1和Java中的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版本的代码在当前配置上运行没有问题

在缝纫机中。缝合方法opencv引发断言异常,如“k==MAT”。我该如何解决这个问题?MatVector在这个示例代码中的用法正确吗?

谢谢


共1个答案

匿名用户

我找到了,这是一个与JavaCv相关的bug。

实际上,贾瓦夫是无罪的。OpenCV缝合器API使用cv::OutputArray返回缝合的图像,但此方法在执行时将cv::Output数组强制转换为cv::Mat。JavaCV仅通过使用参数接口来移植OpenCV方法,因此它将参数转换为std::vector,这将导致断言失败。

需要将std::vector转换为Mat才能正常工作。我不知道这种转换还有其他方法,但除此之外,只有lib的作者可以修复它。

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