图像全景拼接黑点

Posted

技术标签:

【中文标题】图像全景拼接黑点【英文标题】:Image panorama stitching black spots 【发布时间】:2017-11-29 12:48:54 【问题描述】:

也许有人知道是什么导致了这个问题。 我有一个简单的代码,用于在一张全景图像中拼接 12 张图像,但遇到了奇怪的行为。 这是在我的 MacBook Pro 上拼接的结果:

https://drive.google.com/open?id=1f_7i_rb8pnbHEBxlowzFa13MAHvxN07u

在我的桌面 Mac 上拼接的结果:

https://drive.google.com/open?id=19CoyPzz6QgDjqG1lUZbphGPYvCAg41hi

我使用的代码是 same 和图像也一样。在我的桌面 Mac 上,我可以毫无问题地构建和运行它,但在我的 MacBook 上它根本不工作,它显示了下一个错误:

OpenCV Error: Assertion failed (imgs.size() == imgs_.size())
in composePanorama, file /tmp/opencv-20171031-87373-6u1izq/opencv-3.3.1/modules/stitching/src/stitcher.cpp, line 168

libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /tmp/opencv-20171031-87373-6u1izq/opencv-3.3.1/modules/stitching/src/stitcher.cpp:168:
error: (-215) imgs.size() == imgs_.size() in function composePanorama

这是我的代码:

#include <stdio.h>
#include <iostream>
#include <vector>

#include <opencv2/opencv.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/stitching.hpp>


using namespace std;
using namespace cv;

int main(int argc, char** argv ) 

    vector<Mat> images_arr;

    const string images[] = 
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/1.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/2.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/3.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/4.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/5.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/6.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/7.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/8.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/9.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/10.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/11.jpeg",
        "/Users/george/CLionProjects/OpenCV_Stitch/test_stitch/12.jpeg",
    ;


    const char* outFile =  "/Users/george/CLionProjects/OpenCV_Stitch/out.jpeg";

    for(auto path : images) 
        Mat image = imread(path, IMREAD_REDUCED_COLOR_2 | IMREAD_IGNORE_ORIENTATION);
        images_arr.push_back(image);
    

    Mat pano;
    Stitcher stitcher = Stitcher::createDefault(false);
    stitcher.setRegistrationResol(0.8);
    stitcher.setSeamEstimationResol(0.1);
    stitcher.setCompositingResol(1);
    stitcher.setPanoConfidenceThresh(1);
    stitcher.setWaveCorrection(true);
    stitcher.setWaveCorrectKind(detail::WAVE_CORRECT_HORIZ);
    Stitcher::Status status1 = stitcher.estimateTransform(images_arr);
    Stitcher::Status status = stitcher.composePanorama(images_arr, pano);

    if (status != Stitcher::OK) 
        cout << "Can't stitch images, error code = " << int(status) << endl;
        return -1;
    

    imwrite(outFile, pano);

    return 0;

我的 CmakeLists.txt 配置:

cmake_minimum_required(VERSION 3.8)
project(OpenCV_Stitch)

set(CMAKE_CXX_STANDARD 11)

find_package(OpenCV REQUIRED)

set(SOURCE_FILES main.cpp)
add_executable(OpenCV_Stitch $SOURCE_FILES)
target_link_libraries(OpenCV_Stitch $OpenCV_LIBS)

甚至无法想象是什么导致图像上出现黑点。有没有人遇到过这个?有时,当我使用不同的图像拼接opencv返回错误:相机参数调整失败 我怎样才能防止这种情况?也许使用一些方法来估计相机旋转或类似的东西?

这里是我尝试缝合的图像的链接:

https://drive.google.com/open?id=1-DfSf8eaC7bi37-ZhBpaRt8jHVvO_Qwb

谢谢!

【问题讨论】:

你解决了这个问题吗? 不,黑点留在图像上。 你用什么打开/看图?我想知道这是否可能是操作系统的一种不良随机行为。您是否使用“预览”应用在 Eclipse 中打开图片? 是的,我用 Preview.app 打开它。与我在桌面 Mac 上使用的相同。我使用了许多工具来打开该图像,结果相同。它与我用于预览的应用程序无关,图像本身与工件一样生成。 你能稍微改变一下吗?添加以下行:namedWindow("pano", CV_WINDOW_NORMAL); imshow(“全景”,全景);看看图像是否真的有这些黑色斑点? 【参考方案1】:

我收到与您的代码相同的错误消息。当我修改下面的部分时,它运行没有错误。

Mat pano;
Ptr<Stitcher> stitcher = Stitcher::create(Stitcher::PANORAMA, false);
stitcher->setRegistrationResol(0.8);
stitcher->setSeamEstimationResol(0.1);
stitcher->setCompositingResol(1);
stitcher->setPanoConfidenceThresh(1);
stitcher->setWaveCorrection(true);
stitcher->setWaveCorrectKind(detail::WAVE_CORRECT_HORIZ);
Stitcher::Status status = stitcher->stitch(images_arr, pano);

【讨论】:

您好,请问生成的图片是否完整?我在这里尝试了 3.0,但结果只是目标图像的左侧。 谢谢!是的,该代码编译但结果图像保持不变(有黑点)。 你的 OpenCV 版本是多少?我用的是OpenCV 3.3.1,效果不错。

以上是关于图像全景拼接黑点的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉图像映射与全景拼接

Opencv图像拼接或全景

使用OpenCV进行图像全景拼接

Python实现图像的全景拼接

Python实现图像的全景拼接

OpenCV:全景拼接 - 忽略图像的一部分