1

我正在尝试将 2 个图像合并/缝合在一起,但发现 OpenCV 中的默认拼接器类无法处理我的图像。所以我开始自己写。不幸的是,图像太大而无法附加到此消息中(它们的大小都是 12600x9000 像素)。所以我会尽量解释清楚。

这两张图片不是相机拍摄的照片,而是从 PDF 文件中提取的 tiff 文件。图像本身实际上是 CAD 图纸,所以没有太多渐变,因此我认为默认的拼接器类无法处理它们。

到目前为止,我设法提取了特征并匹配它们。我还使用以下众所周知的示例将它们拼接在一起:

Mat WarpedImage;
cv::warpPerspective(img_2,WarpedImage,homography,cv::Size(2*img_2.cols,2*img_2.rows));
Mat half(WarpedImage,Rect(0,0,img_1.cols,img_1.rows));
img_1.copyTo(half);

我有点让它适合..因为我的问题是,在我的情况下,两个图像可以垂直或水平对齐。默认情况下,互联网上的所有缝合示例都假定第一张图像是左图,第二张图是右图。

所以我的第一个问题是:如何检测图像是在第一张图像的左侧、右侧、上方还是下方并创建适当大小的新图像?

其次..目前我得到了正确的图像..但是,因为我没有一些像样的代码来检查新图像的理想宽度和高度,所以我在新图像中有很多黑色/空白空间。删除那些黑色区域的最佳 C++ 代码是什么?(我在网上看到很多 Python 脚本.. 但没有 C++ 示例......而且我有 0 个 Python 技能......)

非常感谢您的帮助。问候,弗洛里斯。

4

1 回答 1

1

您可以使用 重新投影第二张图像的角perspectiveTransform。使用转换后的点,您可以找到图像的相对位置并计算适合两个图像的新图像大小。这也可以让你处理黑色区域,因为你有两个图像的边界。

于 2013-09-10T13:02:42.183 回答