-1

嗨,我有一个声明为 rgbMat 的矩阵,我正在尝试通过以下代码对其进行旋转:

    CvMat* rot = cvCreateMat(2,3,CV_32FC1);
    CvPoint2D32f center = cvPoint2D32f(rgbMat->width/2,rgbMat->height/2); 
    double angle = 90;
    double scale = 1;
    CvMat* rot3= cv2DRotationMatrix( center, angle, scale, rot);

不幸的是,我只得到 6 个值作为输出,而我期待 25 个值,因为我的原始 rgbMat 是 5*5 矩阵,如下所示:

       {
        { 1, 1, 1, 1, 1} ,
        { 0, 0, 0, 0, 0} ,
        { 2, 2, 2, 2, 2} ,
        { 0, 0, 0, 0, 0} ,
        { 1, 1, 1, 1, 1}  } 

谁能告诉我为什么?

4

2 回答 2

3

首先,坚持使用 C API (CvMat*, cvFoo) 或 C++ API(Mat, Foo)。清除后,您确实得到了正确的旋转矩阵,现在您必须使用 cvWarpAffine 或 WarpAffine应用它。

于 2013-07-12T15:03:19.573 回答
2

您只得到 6 个值输出,因为您正在迭代并打印旋转矩阵的值,而不是rgbMat. 执行此操作的代码实际上是正确的,并且您得到了应有的输出。

除了我建议您遵循的 Boyko Perfanov 的建议之外,您还可以使用cvTranspose(),它将旋转rgbMat90 度,这就是您正在尝试做的事情。这是可能的,因为rgbMat在两个维度上都是对称的。这种方法消除了显式迭代CvMat.

cvTranspose(rgbMat, rgbMat);
于 2013-07-12T17:04:05.080 回答