【问题标题】:Merging two torn pieces of a paper into one image in OpenCV在 OpenCV 中将两张撕破的纸合并成一张图像
【发布时间】:2014-03-27 23:36:16
【问题描述】:

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

我得到了 2 张匹配但位于单独的 2 个 cv::Mat 对象中的图像。

现在,我需要将这 2 个图像合并为 1 个图像。这样做的一种方法是将两个图像的像素逐个像素复制到新图像中,但这将非常耗时且处理器成本高。

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

【问题讨论】:

  • 您可能会在这里找到一些想法:cs.rit.edu/~nas2188/ms_project/report.pdf
  • 也许可以试试image stitching
  • 尝试使用 mat.copyTo(image,mask) 绘制填充在单独蒙版图像上的轮廓
  • 谢谢@Micka,我正在这样做,我得到了我的结果,它的工作

标签: c++ opencv image-processing image-stitching


【解决方案1】:

你可以使用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)));

我在这里假设图像大小相同,但如果不是,您可以更新代码。上面的示例还显示了如何复制整个图像。您可以定义蒙版并仅复制带有纸片的地方。要绘制蒙版,您可以使用polylines

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 方向上的移动来完成,但它需要更多的计算,比如估计你的多边形的bounding box

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-01
    • 2021-08-18
    相关资源
    最近更新 更多