2011-07-13 31 views
0

矩形に対して行列計算を行うかどうかを調べる一般的な質問がありました。私は情報を座標で格納したCvRectを持っています。私は変換データを持つcvMatを持っています。私が知りたいのは、Rectが行列データを使って回転した、歪めた、再配置した矩形を生成する方法があるかどうかです。私はオンラインで検索しましたが、私は画像変換に関する情報しか取得できませんでした。OpenCVでの矩形行列計算

ご協力いただきありがとうございます。

答えて

0

いいえ、これはできません。 cv :: Rectはそれもできません。マンハッタンの世界では四角形しか記述されていないからです。 cv :: RotatedRectがありますが、これはスキューを扱っていません。

ただし、CVにあなたの四角形の隅の点を養うことができます::変換: http://opencv.itseez.com/modules/core/doc/operations_on_arrays.html?highlight=transform#cv2.transform

あなたはそれに応じて変換された4つのポイントを取得します。この関数のより特殊化されたバージョンも存在することに注意してください。 warpPerspective()とwarpAffine()です。

+0

私はWarpPerspectiveを見ましたが、CvArr *を要求します。 OpenCVのドキュメントでは、CvArr、CvMat、およびIplImageだけが有効な唯一のデータメンバーであると指定しているため、そこにCvRectを渡すことができるかどうかはわかりません。また、どのようにして4つの異なるポイントをどちらの関数に渡すことができますか? – Seb

+0

いいえ、Rectを全く渡すことはできません。最初に4点を含むマットを作成する必要があります。そこにポイントを保存するには、2チャンネルマトリックスまたは3チャンネルマトリックス(3番目のチャンネルを1に設定)を使用します。 – ypnos

+0

ポイント・トゥ・マトリクス変換の例はありますか?私はポイントを使って行列を作成しようとしましたが、Transformを実行するときに私はそれをクラッシュさせました。私は "CvMat * pointMat = cvCreateMat(2、2、CV_32F);"を使って2x2行列を作成しました。次に、私は "cvSetReal2D"を使ってポイント情報を設定します。また、マトリックスのデータが存在することを確認しました。私は変換関数を実行したときに私はそれが私にクラッシュした。私が使用したパラメータは "cvTransform(pointMat、pointMat、H、0);"ここで、 'H'は3x3の行列です。 – Seb