Я работаю с kinect, и мне нужно сохранить изображение глубины RAW. Это означает, что я не должен сохранять его с преобразованием в 8 бит (это то, что делает imwrite!), Но сохранить его как 16 бит, без уменьшения глубины. Я надеюсь, что этот вопрос не будет слишком тривиальным, но я новичок в программировании OpenCV. Я пробовал следующее, но это не работает:OpenCV (C++): как сохранить 16-битное изображение?
[...]
Mat imageDepth (480, 640, CV_16UC1);
Mat imageRGB;
// Video stream settings
VideoCapture capture;
capture.open(CAP_OPENNI);
if (!capture.isOpened()) {
cerr << "Cannot get video stream!" << endl;
exit (EXIT_WITH_ERROR);
}
if (!capture.grab()) {
cerr << "Cannot grab images!" << endl;
exit (EXIT_WITH_ERROR);
}
// Getting frames
if (capture.retrieve(imageDepth, CAP_OPENNI_DISPARITY_MAP)) {
imwrite(fileDepth, imageDepth);
}
if(capture.retrieve(imageRGB, CAP_OPENNI_BGR_IMAGE)) {
imwrite(fileRGB, imageRGB);
}
return EXIT_WITH_SUCCESS;
Заранее спасибо.
[? Вы читали документацию] (http://docs.opencv.org/modules/highgui/doc/reading_and_writing_images_and_video.html#imwrite) " Функция imwrite сохраняет изображение в указанном файле. ** Формат изображения выбирается на основе расширения имени файла ** (см. Список изменений для имени файла imread()). Только 8-битный (или 16-разрядный без знака (CV_16U) в случае ** PNG, JPEG 2000 и TIFF **) одноканальные или 3-канальные (с порядком канала BGR) могут быть сохранены с помощью этой функции. " – Cornstalks
попробуйте сохранить как png или tiff – berak
Действительно, я прочитал документацию, на самом деле я положил CV_16UC1, и я сохранил изображение как PNG. Но изображение все еще 8 бит! EDIT: не могли бы вы рассказать мне, что не так в этом коде, если предположить, что fileDepth имеет .png как расширение? Большое спасибо –