我想创建一个拼接算法。我已经成功地通过一些必要的调整来创建它。下面的照片是我的拼接程序的例子。我可以向它提供的图像(的无序列表,只要图像是在飞行路径或并排而不管它们的取向也将努力彼此。 OpenCV Center同形异形
的问题是,如果图像假设找到关键点,匹配和单应性都是正确的。
通过改变这段代码有没有办法将第一张图像居中放置到目标空白图像上,然后仍然缝到它上面,并且我在堆栈溢出(Opencv Image Stitching or Panorama)上得到了这个代码,我不完全确定它是如何工作的,并且如果有人可以解释它。
感谢您提前提供任何帮助!
Mat stitchMatches(Mat image1,Mat image2, Mat homography){
Mat result;
vector<Point2f> fourPoint;
//-Get the four corners of the first image (master)
fourPoint.push_back(Point2f (0,0));
fourPoint.push_back(Point2f (image1.size().width,0));
fourPoint.push_back(Point2f (0, image1.size().height));
fourPoint.push_back(Point2f (image1.size().width, image1.size().height));
Mat destination;
perspectiveTransform(Mat(fourPoint), destination, homography);
double min_x, min_y, tam_x, tam_y;
float min_x1, min_x2, min_y1, min_y2, max_x1, max_x2, max_y1, max_y2;
min_x1 = min(fourPoint.at(0).x, fourPoint.at(1).x);
min_x2 = min(fourPoint.at(2).x, fourPoint.at(3).x);
min_y1 = min(fourPoint.at(0).y, fourPoint.at(1).y);
min_y2 = min(fourPoint.at(2).y, fourPoint.at(3).y);
max_x1 = max(fourPoint.at(0).x, fourPoint.at(1).x);
max_x2 = max(fourPoint.at(2).x, fourPoint.at(3).x);
max_y1 = max(fourPoint.at(0).y, fourPoint.at(1).y);
max_y2 = max(fourPoint.at(2).y, fourPoint.at(3).y);
min_x = min(min_x1, min_x2);
min_y = min(min_y1, min_y2);
tam_x = max(max_x1, max_x2);
tam_y = max(max_y1, max_y2);
Mat Htr = Mat::eye(3,3,CV_64F);
if (min_x < 0){
tam_x = image2.size().width - min_x;
Htr.at<double>(0,2)= -min_x;
}
if (min_y < 0){
tam_y = image2.size().height - min_y;
Htr.at<double>(1,2)= -min_y;
}
result = Mat(Size(tam_x*2,tam_y*2), CV_32F);
warpPerspective(image2, result, Htr, result.size(), INTER_LINEAR, BORDER_CONSTANT, 0);
warpPerspective(image1, result, (Htr*homography), result.size(), INTER_LINEAR, BORDER_TRANSPARENT,0);
return result;`
Off topic:看起来你一直在玩乐。前一段时间看了一下,以便在转向不同的工作之前用无人机检测石油管道泄漏。不知道有没有人建造过它。 – user4581301
“颠倒”是什么意思? – KjMag
可能重复[拼接图像使用模板匹配和warpAffine](https://stackoverflow.com/questions/44457064/stitching-images-using-template-matching-and-warpaffine) –