Это очень простой код, но не знаю, где он ошибся, где я скрываю изображения от 8 до 32
Та же самая нить как это
Как преобразовать 8-битный OpenCV IplImage * в 32-битный IplImage *?
char * InputImagePath = "E:\\Inp\\lg1.jpg";
IplImage* ImageIn = cvLoadImage(InputImagePath,1);
IplImage *img32 = cvCreateImage(cvGetSize(ImageIn), 32 , 3);
cvConvertScale(ImageIn,img32,1/255.);
cvSaveImage("E:\\Inp\\zzout.jpg",img32);
Вывод: zzout.jpg сохранен на моем локальном жестком диске, но он пуст (пустое изображение)
Пожалуйста, помогите мне с этим .. сыт по горло с этой простой проблемой
В случае, если вы застряли на старом OpenCV, вот более полный ответ:
Как я вижу, Pixel, вы работаете с JPEG, что означает, что вам нужно обрабатывать 8-битный (Grayscale) или 24-битный (BGR) ввод.
Вот код, который вам нужен:
if (inputImage->nChannels == 1)
{
cvCvtColor(inputImage, image24bit, CV_GRAY2BGR);
}
else
{
cvCopy(inputImage, image24bit, NULL);
}
Если вы не обязаны использовать структуры OpenCV старого стиля, я предлагаю перейти к более интуитивному способу обработки изображений в более новых версиях: [cv :: Mat] и I / O: [cv: imread / cv: imwrite]
Дайте ему прочитать:
http://opencv.willowgarage.com/documentation/cpp/basic_structures.html
http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html
cvSaveImage может сохранять только 8-битные изображения.
Вы пытаетесь сохранить 32-битное изображение с плавающей точкой в формате jpeg, но jpeg поддерживает только 8 бит (хорошо, стандарт имеет 12 бит, но это никто не поддерживает).