C++ 在opencv中缝合2个图像

C++ 在opencv中缝合2个图像,c++,image,image-processing,opencv,C++,Image,Image Processing,Opencv,我正在尝试缝合两张图像,只是为了开始全景摄影。我已经找到了关键点,使用RANSAC找到了单应性,但我不知道如何对齐这两个图像(我是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

我正在尝试缝合两张图像,只是为了开始全景摄影。我已经找到了关键点,使用RANSAC找到了单应性,但我不知道如何对齐这两个图像(我是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);

现在它开始工作了

你创建一个新的更大的图像,具有正确的组合大小,然后将现有图像的大小放在最终图像中你想要的位置,并将现有图像复制到ROI。

我完成了Bodyboard编辑的步骤,但我始终将最终图像完全作为灰色图像。!尽管我确信我的结果图像已正确扭曲。任何帮助都将不胜感激,@dervish是您的源图像3通道吗?如果不是,您必须在缝合之前转换它们,或者将结果与源图像的类型相同,然后再转换
//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);