[英]Unable to stitch images via OpenCV in C++
我需要在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/32ZNS,而在這些文件上起作用-http://imgur.com/a/ve5sY
我究竟做錯了什么? 我該如何解決?
提前致謝。
cv::Stitchers
工作原理是在單獨的圖像中找到共同的特征,然后使用這些特征找出圖像在何處適合。 在縫合工作的樣本中,您會發現很多重疊之處:藍色屋頂,馬路對面建築物的特征等。
在失敗的集合中,沒有重疊,因此算法無法找出如何將它們組合在一起。 看起來您可以通過將它們放在一起來“拼接”這些圖像。 為此,您可以按照此答案中的描述使用hconcat
: https : hconcat
有一種非常簡單的方式可以並排顯示兩個圖像。 可以使用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與垂直粘貼圖像的功能類似。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.