Использование cvReshape после преобразования из IplImage в CvMat с помощью cvGetImage
Мне нужно получить одномерные векторы из входных изображений в градациях серого, чтобы рассчитать ковариационную матрицу. Поэтому я пытаюсь преобразовать IplImage в CvMat, а затем изменить его.
В первый раз я использовал следующий код:
CvMat *image_matrix = cvCreateMat(image->width, image->height, CV_32FC1);
cvConvert(image, image_matrix);
CvMat iv_p, *image_vector = cvCreateMat(image->widht * image->height, 1, CV_32FC1);
image_vector = cvReshape(image_matrix, &iv_p, 1, image->widht * image->height);
Но это дало мне
Утверждение не выполнено (src.size == dst.size && src.channels<> == dst.channels<> в cvConvertScale)
Поэтому я нахожу здесь другой способ:
CvMat i_p, *image_matrix;
image_matrix = cvGetMat(image, &i_p, 0, 0);
CvMat iv_p, *image_vector = cvCreateMat(image->widht * image->height, 1, CV_32FC1);
image_vector = cvReshape(image_matrix, &iv_p, 1, image->widht * image->height);
Но на этот раз я получаю
Шаг изображения неправильный (матрица не является непрерывной, поэтому количество строк не может быть изменено> в cvReshape.
Может ли кто-нибудь предложить какое-либо решение моей проблемы?