Я передаю массив изображений (IplImage **) объекту в C ++, используя OpenCV.Затем я пытаюсь перебрать этот массив и изменить их размер до фиксированного размера (150x150)
Я делаю это так:
for(int i = 0; i< this->numTrainingFaces; i++)
{
IplImage* frame_copy = cvCreateImage( cvSize(150,150), this->faceImageArray[0]->depth, this->faceImageArray[0]->nChannels );
cout << "Created image" << endl;
cvResize(this->faceImageArray[i], frame_copy);
cout << "Resized image" << endl;
IplImage* grey_image = cvCreateImage( cvSize( frame_copy->width, frame_copy->height ), IPL_DEPTH_8U, 1 );
cout << "Created grey image" << endl;
cvCvtColor( frame_copy, grey_image, CV_RGB2GRAY );
cout << "Converted image" << endl;
this->faceImageArray[i] = grey_image;
cvReleaseImage(&frame_copy);
cvReleaseImage(&grey_image);
}
Но я получаю этовывод, и я не уверен, почему:
Created image
Resized image
Created grey image
Converted image
Created image
OpenCV Error: Assertion failed (src.type() == dst.type()) in cvResize, file /build/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp, line 3102
terminate called after throwing an instance of 'cv::Exception'
what(): /build/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp:3102: error: (-215) src.type() == dst.type() in function cvResize
Aborted
Я просто пытаюсь заменить изображение в массиве на изображение с измененным размером за несколько шагов.
Редактировать:
Пересмотрел мой код следующим образом:
for(int i = 0; i< this->numTrainingFaces; i++)
{
IplImage* frame_copy = cvCreateImage( cvSize(150,150), this->faceImageArray[i]->depth, this->faceImageArray[i]->nChannels );
cvResize(this->faceImageArray[i], frame_copy);
IplImage* grey_image = cvCreateImage( cvSize( frame_copy->width, frame_copy->height ), IPL_DEPTH_8U, 1 );
cvCvtColor( frame_copy, grey_image, CV_RGB2GRAY );
faceImageArray[i] = cvCreateImage( cvSize(grey_image->width, grey_image->height), grey_image->depth, grey_image->nChannels);
cvCopy(grey_image,faceImageArray[i]);
cvReleaseImage(&frame_copy);
cvReleaseImage(&grey_image);
}
Затем я выполняю какой-то PCA и получаю такой вывод:
OpenCV Error: Null pointer (Null pointer to the written object) in cvWrite, file /build/buildd/opencv-2.1.0/src/cxcore/cxpersistence.cpp, line 4740
Но яНе думаю, что мой код дошел до того, что я явно вызываю cvWrite, поэтому он должен быть частью библиотеки.При необходимости я могу дать полную реализацию - есть ли в моем коде что-нибудь, что создаст нулевой указатель?
Мой полный исходный код находится здесь: http://pastie.org/1447022 - класс создан, переменныеset, затем learn () вызывается.