0

C++ API を使用した openCV で回転行列を作成している場合

       Mat rot_matrix = getRotationMatrix2D(src_center, angle, 1.0);

では、CでopenCVにどのように記述すればよいですか? マットの代わりに何を書けばいいですか? こんな感じですか:-

         CvMat* rot_mat =cv2DRotationMatrix( center, angle, scale, rot );

上記の宣言は正しいですか?はいの場合、ラップアフィン関数でどのように表現できますか? こんな感じですか:-

         cvWarpAffine( src, dst, rot_mat);
4

2 に答える 2

1

コメント欄での私たちのちょっとしたチャットによると、あなたは少し混乱していると思うので、もう少し明確にするための回答を書くことにしました.

最初にあなたが書いた元の質問Matは、確かにC++形式です。

Cでは使用しますCvMatが、関数 cv2DRotationMatrix()はすでにCvMat *パラメーターの一部として取り込まれているため、次のように使用できます。

 cv2DRotationMatrix(center,angle,scale,rot_mat);

どこ:

  • center はCvPoint2D32f、ソース イメージの回転の中心 (幅/2、高さ/2) です。
  • angle – 目的の回転角度 (度単位)。
  • scale – 等方性倍率 (1 は画像が同じサイズに保たれることを意味します)
  • mapMatrix – 宛先マトリックスへのポインター (回転マトリックスとして使用される 2x3 マトリックス)

rot_mat は回転行列を保持します。

ここに画像の説明を入力

どこ:

ここに画像の説明を入力

ここで、画像全体を x 度 (ピクセル/画像/画像のアフィン変換)で回転させた後、各ピクセルの位置を計算したいと考えています。

この段階で、アフィン変換で使用されている回転行列があり関数を使用できるようにアフィン変換(画像の回転)を実行したいcvWarpAffine()

私たちの場合には:

cvWarpAffine( src, dst, rot_mat );

どこ:

  • src – ソース画像
  • dst – 宛先イメージ
  • mapMatrix(変換行列) としての rot_mat

*フラグである4番目のパラメーターもありますが、この場合はデフォルトで問題ありません。

それは何をしますか?

指定された行列を使用してソース イメージを変換します。

ここに画像の説明を入力

ここに画像の説明を入力

*または、前に説明したように、簡単に言えば、回転後の各ピクセルの新しい位置を「ちょうど」計算します (回転行列を使用して、アフィン関数への入力として)。

rot_mat は 2x3 マットである必要があります - を呼び出して作成できますcvCreateMat()

src,dst はIplImage *(C コードであると言ったため) です。

*関数の技術的な側面は次のとおりです: http://opencv.willowgarage.com/documentation/geometric_image_transformations.html

于 2013-07-11T14:52:58.627 に答える
0

C++ プログラムを C に移植したようなものです。Wikipediaによると、目的に合わせて探すことができる C インターフェイスがあります。

Cは参照をサポートしていないため、パラメーターが参照ではなくポインターである場合、宣言は正しいようです。

ポインタを使用してクラス オブジェクトをラップできます。次のようになります。

CvMat * cv2dRotationMatrix( CvPoint *, CvAngle *, float );

ご指摘のとおり、純粋な C 関数の下で C++ 関数をラップする必要があります。

于 2013-07-11T09:28:56.433 に答える