我正在尝试合并/缝合2张图像,但发现OpenCV中的默认拼接器类无法处理我的图像。 所以我开始写自己的.. 不幸的是,图像太大而无法附加到此消息(它们的大小都是12600x9000像素)..所以我会尝试尽可能好地解释。
这2张图片不是相机拍摄的照片,而是从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);
我觉得它很合适..因为我的问题是在我的情况下,2张图像可以垂直或水平对齐。 默认情况下,互联网上的所有针迹示例都假定第一张图像是左图像,第二张图像是右图像。
所以我的第一个问题是: 如何检测图像是在第一张图像的左侧,右侧,上方还是下方,并创建适当大小的新图像?
其次.. 目前我正在获得正确的图像..但是,因为我没有一些不错的代码来检查新图像的理想宽度和高度,所以我在新图像中有很多黑/空的空间。 删除那些黑色区域的最佳C ++代码是什么? (我在网上看到了很多Python脚本..但没有C ++的例子......我有0个Python技能....)
非常感谢您的帮助。 问候, 弗洛。
答案 0 :(得分:1)
您可以使用perspectiveTransform
重新投影第二张图片的边角。通过变换后的点,您可以找到图像的相对位置,并计算出适合两个图像的新图像尺寸。这也可以让你处理黑色区域,因为你有两个图像的边界。