gpt4 book ai didi

visual-c++ - 如何在opencv中合并两个图像?

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:45 25 4
gpt4 key购买 nike

我计算了单应性,去掉了透视变换。我可以在一个窗口中显示两个图像,但无法合并它们。这是我的示例图像-> image1

image2

我正在使用的代码->

cv::warpPerspective(image2,warpresult2,homography,cv::Size(2*image2.cols,image2.rows));


Mat imgResult(image1.rows,2*image1.cols,image1.type());

Mat roiImgResult_Left = imgResult(Rect(0,0,image1.cols,image1.rows));
Mat roiImgResult_Right = imgResult(Rect(image1.cols,0,image2.cols,image2.rows));

Mat roiImg1 = image1(Rect(0,0,image1.cols,image1.rows));
Mat roiImg2 = warpresult2(Rect(0,0,image2.cols,image2.rows));

roiImg1.copyTo(roiImgResult_Left); //Img1 will be on the left of imgResult
roiImg2.copyTo(roiImgResult_Right); //Img2 will be on the right of imgResult

imshow("Finalimg",imgResult);
imwrite("C:\\OpenCv_Projects\\outputimage.jpg",imgResult);
cvWaitKey(0);

我认为问题出在我给 roiImgResult_right 的坐标上。

输出图像是 -> Output images如您所见,图像未正确合并,右侧有黑色区域。如何同时删除它?

最佳答案

OpenCV 已经实现了图像拼接。如果使用“-D BUILD_EXAMPLES”编译,则可以使用二进制stitching_detailed。用法很简单:./stitching_detailed img1 img2 ...

或者,您可以只使用拼接器类(来自 here 的示例):

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/stitching/stitcher.hpp"

using namespace std;
using namespace cv;

bool try_use_gpu = false;
string result_name = "result.jpg";

int main(int argc, char* argv[])
{
vector<Mat> imgs;
// add images...

Mat pano;
Stitcher stitcher = Stitcher::createDefault(try_use_gpu);
stitcher.stitch(imgs, pano);
imwrite(result_name, pano);
}

关于visual-c++ - 如何在opencv中合并两个图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com