openCVのcopyTo機能を利用できます。たとえば、piece1 と piece2 が 2 枚の紙の画像であるとします。
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 方向の両方のシフトで実行できますが、ポリゴンのバウンディング ボックスの推定など、より多くの計算が必要になります。