1

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つの画像を垂直または水平に並べることができることです。デフォルトでは、インターネット上のすべてのステッチの例は、最初の画像が左の画像で、2 番目の画像が右の画像であると想定しています。

したがって、私の最初の質問は次のとおりです。画像が最初の画像の左、右、上、または下にあるかどうかを検出し、適切なサイズの新しい画像を作成するにはどうすればよいですか?

第二に..現在、適切な画像を取得しています..しかし、新しい画像の理想的な幅と高さを確認するための適切なコードがないため、新しい画像に多くの黒/空のスペースがあります。これらの黒い領域を削除するのに最適な C++ コードは何でしょうか? (私はネット上で多くのPythonスクリプトを見ています..しかし、これのC++の例はありません..そして私はPythonのスキルがありません....)

よろしくお願いいたします。こんにちは、フローリス。

4

1 に答える 1

1

で 2 番目の画像の角を再投影できますperspectiveTransform。変換された点を使用して、画像の相対位置を見つけ、両方の画像に適合する新しい画像サイズを計算できます。これにより、2 つの画像の境界があるため、黒い領域を処理することもできます。

于 2013-09-10T13:02:42.183 に答える