что 2 и 3 означают в этом и как я могу изменить их CvMat * rot = cvCreateMat (2,3, CV_32FC1) - PullRequest
0 голосов
/ 09 октября 2009

Что означают 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;
}

Ответы [ 3 ]

0 голосов
/ 09 октября 2009

2 = количество строк и 3 = количество столбцов в вашей матрице, rot.

Можете ли вы опубликовать весь код? Или, может быть, скажите нам, чего вы хотите достичь? Вы пытаетесь повернуть изображение?

Кроме того, я бы рекомендовал обновить до OpenCV 2.0 , который имеет интерфейс C ++. В новой версии вы можете широко использовать класс Mat, который обрабатывает все (матрицы, изображения и т. Д.) И делает все намного проще.

0 голосов
/ 06 ноября 2012

Вы получаете ошибку, используя любую другую форму, кроме 2x3, потому что тогда для opencv это не имеет смысла, когда вы используете rot для вращения.

Взгляните на ответ Джейкоба .
Он подробно описывает компоненты матрицы вращения.

0 голосов
/ 09 октября 2009

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);

Изменить их так же просто, как подставить разные значения. Но я думаю, вы уже должны это знать.

...