// `s` is the webots's rangefinder
auto buffer = (float*)s->getRangeImage();
cv::Mat img(cv::Size(width, height), CV_32FC1, buffer); // image data is float*
// check and success.
// imshow("pic", img);
// cvWaitKey(0);
// encode:
std::vector<uchar> newBuffer;
cv::imencode(".jpg", img, newBuffer);
// decode
auto img_decode = cv::imdecode(newBuffer, cv::IMREAD_UNCHANGED);
// fail and get a black image
imshow("pic", img_decode);
cvWaitKey(0);
我试过在cv::imdecode
函数中使用其他参数,比如cv::IMREAD_ANYDEPTH
,但是失败了。我在网上搜索了很长时间。但是没有用。请帮助或者试着给予一些想法如何实现这个。
1条答案
按热度按时间knpiaxh11#
如果您的数据是真实的,即浮点和单通道,您可以尝试写入支持该数据类型的PFM或TIFF格式图像。
正如@wohlstad在评论中提到的,JPEG是uint 8,所以只支持范围为0..255的整数。