0

2 和 3 在这意味着什么,我该如何更改它们?

CvMat* rot = cvCreateMat(2,3,CV_32FC1) 

当我更改这两个值时,我得到一个 openCV GUI 错误处理程序。

输入参数的大小不匹配()

在函数 cvConvertScale.\cxconvert.cpp(1601)

我想明白这意味着什么

更新:

代码是:

#include <cv.h>
#include <highgui.h>
int main()
{
    CvMat* rot = cvCreateMat(2,3,CV_32FC1);
    IplImage *src, *dst;
    src=cvLoadImage("doda.jpg");
//  make acopy of gray image(src)
    dst = cvCloneImage( src );
    dst->origin = src->origin;
// make dstof zeros 
    cvZero( dst );
// Compute rotation matrix
    double x=0.0;
// loop to get rotation from 0 to 360 by 4 press on anykey
    for(int i=1;i<=5;i++)
    {
        CvPoint2D32f center = cvPoint2D32f(src->width/2,src->height/2);
        double angle = 0+x;
        double scale = 0.6;
        cv2DRotationMatrix( center, angle, scale, rot );
// Do the transformation
        cvWarpAffine( src, dst, rot);
        cvNamedWindow( "Affine_Transform", 1 );
        cvShowImage( "Affine_Transform", dst );
        if (i<=4)
            x=x+90.0;
        else
            x=0.0;
        cvWaitKey();
    }
    cvReleaseImage( &dst );
    cvReleaseMat( &rot );
    return 0;
}
4

3 回答 3

0

2 = 行数和 3 = 矩阵中的列数,rot.

你可以发布整个代码吗?或者也许告诉我们您想要达到的目标?您是否要旋转图像?

另外,我建议升级到具有 C++ 接口的OpenCV 2.0 。在新版本中,您可以广泛使用 Mat 类来处理所有内容(矩阵、图像等)并使事情变得更加简单。

于 2009-10-09T14:04:15.197 回答
0

rot使用 2x3 以外的任何其他形状都会出现错误,因为当您用于旋转时,它对 opencv 毫无意义。

看看雅各布的回答
他详细描述了旋转矩阵组件。

于 2012-11-06T11:46:25.050 回答
0

2 和 3 是您正在创建的矩阵的行数和列数。

介绍到使用 OpenCV 编程

分配一个矩阵:

CvMat* cvCreateMat(int rows, int cols, int type);

type:矩阵元素的类型。在表格中指定 CV_<bit_depth>(S|U|F)C<number_of_channels>。例如:CV_8UC1表示8位无符号单通道矩阵,CV_32SC2表示32位有符号矩阵有两个通道。

例子:

 CvMat* M = cvCreateMat(4,4,CV_32FC1);

更改它们就像替换不同的值一样简单。但我想你应该已经知道了。

于 2009-10-09T10:13:59.137 回答