5

破れた紙片を 1 つの画像に結合するプロジェクトに取り組んでいます。これまで、輪郭を見つけて一致する部分を見つけるための前処理を行ってきました。

一致しているが、別々の 2 つcv::Matのオブジェクトにある 2 つの画像を取得しています。

ここで、これら 2 つの画像を 1 つの画像にマージする必要があります。これを行う 1 つの方法は、両方の画像をピクセル単位で新しい画像にコピーすることですが、これには非常に時間とプロセッサのコストがかかります。

仕事を行うには、OpenCVライブラリ関数または同様の関数を使用した回避策が必要です。

4

1 に答える 1

3

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 方向の両方のシフトで実行できますが、ポリゴンのバウンディング ボックスの推定など、より多くの計算が必要になります。

于 2014-03-28T06:39:29.980 に答える