【问题标题】:Stitching 2 images in opencv在opencv中拼接2个图像
【发布时间】:2012-01-02 14:22:46
【问题描述】:

我正在尝试拼接 2 个图像,只是为了开始全景图。我已经找到了关键点,使用 RANSAC 找到了单应性,但我不知道如何对齐这 2 个图像(我是 opencv 的新手)。现在是代码的一部分

vector<Point2f> points1, points2;
for( int i = 0; i < good_matches.size(); i++ )
{
    //-- Get the keypoints from the good matches
    points1.push_back( keypoints1[ good_matches[i].queryIdx ].pt );
    points2.push_back( keypoints2[ good_matches[i].trainIdx ].pt );
}

/* Find Homography */
Mat H = findHomography( Mat(points2), Mat(points1), CV_RANSAC );

/* warp the image */
warpPerspective(mImg2, warpImage2, H, Size(mImg2.cols*2, mImg2.rows*2), INTER_CUBIC);

我需要缝合Mat mImg1 加载第一个图像的位置和Mat warpImage2 哪里是扭曲的第二个图像。你能告诉我怎么做吗?我还切割了扭曲的图像,我知道我必须更改单应矩阵,但现在我需要对齐这两个图像。感谢您的帮助。

编辑:在 Martin Beckett 的帮助下,我添加了这段代码

//Point a cv::Mat header at it (no allocation is done)
Mat final(Size(mImg2.cols*2 + mImg1.cols, mImg2.rows*2),CV_8UC3);

//velikost img1
Mat roi1(final, Rect(0, 0,  mImg1.cols, mImg1.rows));
Mat roi2(final, Rect(0, 0, warpImage2.cols, warpImage2.rows));
warpImage2.copyTo(roi2);
mImg1.copyTo(roi1);
imshow("final", final);

它现在正在工作

【问题讨论】:

    标签: c++ image image-processing opencv


    【解决方案1】:

    您创建一个具有正确组合尺寸的新的较大图像,然后将现有图像的尺寸make ROIs 放在您希望它们在最终图像中的位置,并将现有图像复制到 ROI。

    【讨论】:

    • 我按照你的步骤做了,由 Bodyboard 编辑,但我总是得到最终图像完全是灰色图像。 !虽然我确定我的结果图像正确变形。任何帮助将不胜感激,
    • @dervish 您的源图像是 3 通道的吗?如果不是,您必须在拼接之前转换它们,或者使结果与源类型相同,然后转换
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2020-05-04
    • 2020-03-10
    • 2012-12-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多