Использование 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.

Может ли кто-нибудь предложить какое-либо решение моей проблемы?

0 ответов

Другие вопросы по тегам