【问题标题】:opencv - Stitching more than 2 imagesopencv - 拼接超过 2 个图像
【发布时间】:2012-02-12 16:16:16
【问题描述】:

我现在正试图在 C++ 中使用 opencv 将两个以上的图像对齐。问题是当我拼接超过2个时,无法加载上一个图像。

例如,imageContainer 现在包含三个图像。

第一张图片:

第二张图片:

第三张图片:

循环的第一次迭代:(结合第一张和第二张图片)

循环的第二次迭代:(结合第一次迭代和第三张图像的结果)

可以看到,在第二次迭代之后,结果图像不包含对象。 (最后一张图左边全黑),

在 main.cpp 中

cv::Mat result = *imageContainer.begin();
for(vector<cv::Mat>::iterator itr = imageContainer.begin(); itr != imageContainer.end(); itr++){
    if(itr == imageContainer.begin())
        continue;
    result = applySURF(result, *itr);
}

在 SURF.cpp 中

cv::Mat applySURF(cv::Mat object, cv::Mat image){

/* More codes here but it won't affect solving the problem */

    cv::Mat result;
    cv::warpPerspective(image, result, transformationMat, cv::Size(object.cols + image.cols, image.rows));

    cv::Mat half(result, cv::Rect(0, 0, image.cols, image.rows));
    object.copyTo(half);

    imshow("Object", object);
    imshow("Result", result);
    cvWaitKey(0);

    return result;
}

我猜这个问题与感兴趣区域 (ROI) 有关。我该如何解决?

非常感谢。

【问题讨论】:

  • 您好,我遇到了山姆问题。你最后是怎么解决的?
  • 您好,请问这个问题怎么解决??我面临着类似的问题。需要帮助。

标签: c++ image-processing opencv


【解决方案1】:

试试下面的代码:)

我测试了一些案例,得出的结论是,如果目标图像的大小与源图像的大小不同,它将重新分配一个新的 Mat 进行粘贴。在您的情况下,ROI 的大小与 object 不同,它分配了一个新的 Mat half,并且与 result 无关 了。所以你的 copyTo 函数将对象复制到 new Mat half 而不是 result 的 ROI。

cv::Mat applySURF(cv::Mat object, cv::Mat image){

/* More codes here but it won't affect solving the problem */

    cv::Mat result;
    cv::warpPerspective(image, result, transformationMat, cv::Size(object.cols + image.cols, image.rows));

    cv::Mat half(result, cv::Rect(0, 0, object.cols, object.rows));
    object.copyTo(half);

    cv::imshow("Object", object);
    cv::imshow("Result", result);
    cv::WaitKey(0);

    return result;
}

【讨论】:

  • 抱歉回复晚了。我在我的程序中尝试你的代码。但是,结果中图像的“区域”仍然是全黑的。谢谢你的评论。我仍在努力解决它。
  • 我理解您的想法:一半应该是与对象大小相同的 ROI,以便对象可以成功粘贴到结果上。
  • 请注意,翘曲取决于单应性。您是否尝试过在第二种情况下使用计算出的单应性的逆?
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 2011-08-26
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
相关资源
最近更新 更多