изменить размер изображения и изменить его глубину - PullRequest
5 голосов
/ 12 сентября 2011

Мне нужно изменить размер IplImage и преобразовать его в CvMat различной глубины, это код, который я написал до сих пор:

void cvResize2(IplImage *imgSrc, IplImage *imgDst)
{
    IplImage *imgTemp;
    imgTemp = cvCreateImage( cvGetSize( imgSrc ), IPL_DEPTH_64F, 1 );

    cvScale( imgSrc, imgTemp, 1/255., 0.0 );
    cvResize( imgTemp, imgDst );
}

Исходное изображение - в оттенках серого, целевое изображение - 64F.немного глубокоcvScale масштабирует только изображения одинакового размера, следовательно, временное изображение.

Программа вызывает следующее исключение при вызове cvResize:

OpenCV Error: Assertion failed (func != 0) in resize, file /tmp/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp, line 1488
terminate called after throwing an instance of 'cv::Exception'
what():  /tmp/buildd/opencv-2.1.0/src/cv/cvimgwarp.cpp:1488: error: (-215) func != 0 in function resize

Я не могу понять, почему, я имеюпроверил, чтобы изображения соответствовали наложенным условиям

  • источник: 512x384, 8 глубина
  • tmp: 512x384, 64 глубина
  • dst: 64x64, 64 глубина

Есть какие-нибудь подсказки?Заранее спасибо

1 Ответ

6 голосов
/ 01 октября 2011

Возможно, вы нашли ошибку. Я могу воспроизвести его и на своем конце (Ubuntu 64-bit, OpenCV-2.1.0). Если вы используете 32-битную точность с плавающей запятой, она работает, но вылетает с 64-битной плавающей запятой. Я рекомендую обновить ваш OpenCV до последней версии и посмотреть, исчезнет ли проблема. Если нет, то скомпилируйте библиотеку в режиме отладки и выполните функцию, которая генерирует утверждение. Если посмотреть на источник-виновник в cvimgwarp.cpp, то кажется, что он не может найти метод интерполяции, который будет использоваться для конечного изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...