Проблемы, возникающие в Opencv cvConvertScale

Это очень простой код, но не знаю, где он ошибся, где я скрываю изображения от 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 сохранен на моем локальном жестком диске, но он пуст (пустое изображение)

Пожалуйста, помогите мне с этим .. сыт по горло с этой простой проблемой

1

Решение

В случае, если вы застряли на старом OpenCV, вот более полный ответ:

  • 8 битное изображение — 1 цветной канал
  • 24-битное изображение — 3 цветовых канала (синий, зеленый, красный)
  • 32-битное изображение — 4 цветовых канала (BGR + Alpha — очень распространено в PNG)

Как я вижу, Pixel, вы работаете с JPEG, что означает, что вам нужно обрабатывать 8-битный (Grayscale) или 24-битный (BGR) ввод.

Вот код, который вам нужен:

if (inputImage->nChannels == 1)
{
cvCvtColor(inputImage, image24bit, CV_GRAY2BGR);
}
else
{
cvCopy(inputImage, image24bit, NULL);
}
2

Другие решения

Если вы не обязаны использовать структуры 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

2

cvSaveImage может сохранять только 8-битные изображения.

Вы пытаетесь сохранить 32-битное изображение с плавающей точкой в ​​формате jpeg, но jpeg поддерживает только 8 бит (хорошо, стандарт имеет 12 бит, но это никто не поддерживает).

1
По вопросам рекламы [email protected]