在OpenCV中将两张撕破的纸合并成一张图像



我正在做一个项目,将一张纸的碎片合并成一个图像。到目前为止,我已经完成了预处理,找到了轮廓和匹配的部分。

我得到了两个匹配的图像,但在单独的2个cv::Mat对象中。

现在,我需要将这两个图像合并为一个图像。一种方法是将两个图像逐像素地复制到新图像中,但这将非常耗费时间和处理器。

我需要一个OpenCV库函数或具有类似功能的解决方案来完成这项工作。

可以使用openCV的copyTo函数。例如,假设piece1和piece2是两张纸的图像:

Mat twoPieces (piece1.rows, 2*piece1.cols, piece1.type());
piece1.copyTo (twoPieces(Rect(0, 0, piece1.cols, piece1.rows)));
piece2.copyTo (twoPieces(Rect(piece1.cols, 0, piece2.cols, piece2.rows)));

我假设这里的图像是相同的大小,但如果他们不是你可以更新代码。上面的例子也展示了如何复制整个图像。你可以定义蒙版,只复制有纸的地方。要绘制蒙版,可以使用折线。

Mat mask1(piece1.size(), CV_8U, Scalar(0));
polylines(mask1, piece1Contours, true, 255, CV_FILLED);
piece1.copyTo (twoPieces(Rect(0, 0, piece1.cols, piece1.rows)), mask1);

当然,如果你知道这两张纸之间的位移你可以在Rect中改变原点这样两张纸就会彼此相邻

Mat mask2(piece2.size(), CV_8U, Scalar(0));
polylines(mask2, piece2Contours, true, 255, CV_FILLED);
piece2.copyTo (twoPieces(Rect(dx, 0, piece2.cols, piece2.rows)), mask2);

我再一次简化了这个例子,假设位移只在X方向上。这可以通过X和Y方向的移动来实现,但它需要更多的计算,比如多边形边界框的估计。

相关内容

  • 没有找到相关文章

最新更新