【发布时间】:2014-11-10 16:43:37
【问题描述】:
我正在使用 kinect,我需要保存 RAW 深度图像。这意味着我不应该通过转换为 8 位来保存它(这就是 imwrite 正在做的事情!),而是将其保存为 16 位,而不会减少任何位深度。我希望这个问题不会太琐碎,但我是 OpenCV 编程的新手。我尝试了以下方法,但它不起作用:
[...]
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;
提前致谢。
【问题讨论】:
-
Have you read the documentation? "函数imwrite将图像保存到指定文件。图像格式根据文件扩展名选择(扩展名列表见imread() ). 只有 8 位(或在 PNG、JPEG 2000 和 TIFF 的情况下为 16 位无符号 (CV_16U))单通道或 3 通道(具有“BGR”通道顺序)图像可以使用此功能保存。”
-
尝试另存为 png 或 tiff
-
确实,我阅读了文档,实际上我已经放入了 CV_16UC1 并将图像保存为 PNG。但是图像仍然是8bit!编辑:你能告诉我这段代码有什么问题吗,假设 fileDepth 有 .png 作为扩展名?非常感谢
-
有没有办法用 Emgu CV 做到这一点???我想将我的图像保存为 16 位深度的 tiff。有什么帮助???