簡體   English   中英

無法在C ++中通過OpenCV拼接圖像

[英]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工作原理是在單獨的圖像中找到共同的特征,然后使用這些特征找出圖像在何處適合。 在縫合工作的樣本中,您會發現很多重疊之處:藍色屋頂,馬路對面建築物的特征等。

在失敗的集合中,沒有重疊,因此算法無法找出如何將它們組合在一起。 看起來您可以通過將它們放在一起來“拼接”這些圖像。 為此,您可以按照此答案中的描述使用hconcathttps : 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM