我需要在C++中使用OpenCV拼接一些图像,所以我编写了以下代码:
#include <opencv2/opencv.hpp>
#include <opencv2/stitching.hpp>
#include <cstdio>
#include <vector>
void main()
{
std::vector<cv::Mat> vImg;
cv::Mat rImg;
vImg.push_back(cv::imread("./stitching_img/S1.png"));
vImg.push_back(cv::imread("./stitching_img/S2.png"));
vImg.push_back(cv::imread("./stitching_img/S3.png"));
cv::Stitcher stitcher = cv::Stitcher::createDefault();
unsigned long AAtime = 0, BBtime = 0;
AAtime = cv::getTickCount();
cv::Stitcher::Status status = stitcher.stitch(vImg, rImg);
BBtime = cv::getTickCount();
printf("%.2lf sec \n", (BBtime - AAtime) / cv::getTickFrequency());
if (cv::Stitcher::OK == status)
cv::imshow("Stitching Result", rImg);
else
std::printf("Stitching fail.");
cv::waitKey(0);
}不幸的是,在处理以下文件时,它总是显示“缝合失败”-- http://imgur.com/a/ve5sY -- http://imgur.com/a/32ZNS
我做错了什么?我怎么才能修复它?
提前谢谢。
发布于 2015-09-22 22:02:37
cv::Stitchers的工作原理是在单独的图像中找到共同的特征,并使用这些特征来找出图像在哪里适合在一起。在你的样本中,你可以找到很多重叠的地方:蓝色的屋顶,路对面的建筑物的特征,等等。
看起来你可以把这些图片“拼接”在一起。为此,您可以使用hconcat,如以下答案所述:https://stackoverflow.com/a/20079134/1737727
发布于 2017-02-04 18:06:38
有一种非常简单的方法可以并排显示两个图像。可以使用opencv提供的以下功能。
Mat image1, image2;
hconcat(image1,image2,image1);//Syntax->
hconcat(source1,source2,destination);此函数还可用于将一组列从一个图像复制到另一个图像。
Mat image;
Mat columns=image.colRange(20,30);
hconcat(image,columns,image);vconcat是一个类似于垂直粘贴图像的功能。
https://stackoverflow.com/questions/32718765
复制相似问题