4

私は、openCV と Visual Studio 2010 を使用して Win7 x64 で作業し、c++ でプログラミングしています。画像( image と呼ぶ)を別の画像( RR_imageと呼ぶ)の長方形の領域にコピーしたい。ただし、この領域は回転します。

ここに画像があります:

ここに画像の説明を入力

ここにRR_imageがあります: ここに画像の説明を入力 (ご覧のとおり、最初の画像は既に回転しています)

最初の画像を赤い四角形でコピーします。

これを行うにはいくつの方法があり、どのような方法がありますか?

私は ROI について知っています。img1.copyTo(img2.rowRange(...), img2.colRange(...));

ありがとう!

4

2 に答える 2

2

主な問題は、OpenCVが画像の透明度をサポートしていないことです。これは、そのタスクを簡単に実行するために必要なことです。

したがって、これを行う1つの方法は、背景のピクセル(たとえば、特定の灰色の陰影)を無視して、回転した(ソース)画像を反復処理してピクセルを宛先画像にコピーするカスタム関数/メソッドを作成することです。ただし、このアプローチは非常に限られています。

編集:

OpenGLは確かにその仕事をすることができますが、それはおそらくあなたがあなたの手に正しく知られたくない複雑さをもたらします。幸い、 ImageMagick++を介してC++ APIを提供し、確実に透明な画像を処理できるImakeMagickのような他の選択肢があります。Magick++の穏やかな紹介をご覧ください。

QtのQImageクラスもおそらくこれを行うことができます。

于 2013-01-24T20:13:40.970 に答える
2

Qt ライブラリと OpenCV で問題を解決しました。

ここで方法:

前者を後者にコピーするためにimageとRR_imageを指定すると、次のコードを使用しました。

QPainter painter(&RR_image);
painter.drawImage( (float)p1.x(),(float)p2.y(), image);

RR_imageimageは QImage オブジェクトでなければならないので、次のコードで Mat から QImage に変換する必要があります:

cvtColor(image, image,CV_BGR2RGB);
QImage image= QImage((uchar*) image.data, image.cols, image.rows, image.step, QImage::Format_RGB888);

結果は次のとおりです。 ここに画像の説明を入力

これが誰かを助けることを願っています!

于 2013-01-29T16:54:25.017 に答える