コメント欄での私たちのちょっとしたチャットによると、あなたは少し混乱していると思うので、もう少し明確にするための回答を書くことにしました.
最初にあなたが書いた元の質問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