1

下面是我将矩阵(声明为 rgbMat)旋转 90 度的代码,如下面的代码所示

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

更新

我正在尝试访问 rot3 的元素,以便我知道我得到了什么值。就像在下面的代码中一样:-

    cv::Mat rot3cpp(rot3);
    for(int i=0;i<rot3cpp.cols;i++)
    {
    for (int j =0;j<rot3cpp.rows;j++)
      {
        CvScalar scal = cvGet2D(rot3,i,j);
        printf("new matrix is %f: \n", rot3cpp.at<float>(i,j));
      }
    }

但我收到这样的错误:

     OpenCV Error: One of arguments' values is out of range (index is out of range) in cvGet2D, file /home/xyz/Documents/opencv-2.4.5/modules/core/src/array.cpp, line 1958 terminate called after throwing an instance of 'cv::Exception' what():  /home/xyz/Documents/opencv-2.4.5/modules/core/src/array.cpp:1958: error: (-211) index is out of range in function cvGet2D

谁能告诉我哪里出错了。任何帮助将不胜感激。

4

2 回答 2

2

第一个循环必须迭代矩阵行,因为 OpenCV 使用行优先顺序。ator的第一个索引cvGet2D是行索引,而不是列。正确的代码:

for(int i=0; i<rot3.rows; i++)
{
   for(int j=0; j<rot3.cols; j++)
   {
       cout << rot3.at<float>(i,j);
   }
}
于 2013-07-12T10:35:32.923 回答
1

首先 - 因为您使用的是 Mat 结构而不是 IplImage - 尝试使用C++ API进行矩阵运算,以避免指针/数据混乱。

然后,

for(int i=0; i<rot3.cols; i++)
{
   for(int j=0; j<rot3.rows; j++)
   {
       cout << rot3.at<float>(i,j); 
   }
}

将工作。

于 2013-07-12T09:02:07.550 回答