如何使用OpenCV / JavaCV拼接100幅图像?当前大多数解决方案都会导致伪像

时间:2018-12-07 12:29:53

标签: opencv opencv3.0 javacv image-stitching

我正在尝试缝制大量重叠程度很高的图像,例如ExampleImage1ExampleImage2

首先,我要草皮的一维线。像这样的东西:Result。这是原始结果的屏幕截图,原始图片超过2MB。因此无法上传。 这是通过将300张图像分解为几组并进行拼接来实现的。像本示例一样,但具有更大的层次结构,但比例更大-针脚1.jpg中的0.jpg,1.jpg,2.jpg图像,针脚2.jpg中的2,3,4图像以及后来将针脚1.jpg和针脚2.jpg拼接在一起< / p>

现在,我希望通过缝合图像来获得相同的结果,例如:0.jpg + 1.jpg = result.jpg,result.jpg + 2.jpg = result.jpg .....等。

我正在使用关注区域的概念来确保重叠区域始终都超过20%。代码如下所示。该代码是for循环的主体。它仅说明了算法的核心部分,而不是确切的代码。

运行此命令后,我得到了一个伪像,例如:Result2。这看起来是因为,由于使用了关注区域概念,因此未在整个图像中观察到缝合管线的后处理。

有人可以告诉我如何解决这个问题吗?

还可以在opencv缝合管线中查看检测到的功能吗?

for (int j = 4; j < 100; j = j + 1) {
    image2 = imread("result.jpg");                                  // result of stitching 0.jpg, 1.jpg,2.jpg and 3.jpg
    image1 = imread(j + ".jpg");

    Rect rect2 = new Rect(0,0, (int)(image1.cols()*0.5),image2.rows());
    Rect rect1 = new Rect(0,0,(int)(image1.cols()*0.5),image1.rows());

    imgs.resize(imgs.size() + 1);
    imgs.put(imgs.size() - 1, image2);
    Roi.push_back(new RectVector(rect2));
    imgs.resize(imgs.size() + 1);
    imgs.put(imgs.size() - 1, image1);
    Roi.push_back(new RectVector(rect1));

    int status = stitcher.stitch(imgs, Roi, pano);
}

0 个答案:

没有答案