根据我们在评论区的小聊天,我认为您有些困惑,因此我决定给您写一个答案,以使其更清楚一些。
首先对于您所写的原始问题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 - 目标图像
- rot_mat 作为我们的 mapMatrix(变换矩阵)
*还有第四个参数是flag,但对于我们的情况,默认值是可以的。
它能做什么?
使用指定的矩阵变换源图像:
*或者用我之前描述的更简单的话来说,它“只是”计算旋转后每个像素的新位置(使用旋转矩阵 - 作为仿射函数的输入)。
rot_mat 应该是 2x3 mat - 你可以通过调用来创建它cvCreateMat()
。
src,dst 是IplImage *
(因为我们说它是 c 代码)。
*函数的技术方面来自:
http: //opencv.willowgarage.com/documentation/geometric_image_transformations.html