从原始缓冲区数据创建Mat图像
Mat Image creation from raw buffer data
我有一个图像的浮动x,浮动y,浮动z值。我想通过复制z值来构建一个16位的png深度图像。我得到的图像结果有一些无效点。下面是我的代码。
uint16_t* depthValues = new uint16_t[size];
auto sampleVector(DepthPoints);
for (unsigned int i = 0; i < sampleVector.size(); i++)
{
depthValues[i] = (sampleVector.at(i).z) * 65536;
}
Mat newDepthImage = cv::Mat(var.height, var.width, CV_16UC1,depthValues);
imwrite(Location, CImage);
有人能告诉我,如果我可以复制浮点值到一个无符号字符数组来创建图像?这就是为什么我的图像有无效点吗?
auto sampleVector(DepthPoints);
const int size = sampleVector.size();
float* depthValues = new float[size];
for (unsigned int i = 0; i < sampleVector.size(); i++)
{
depthValues[i] = (sampleVector.at(i).z);
}
Mat depthImageOne, depthImageTwo;
Mat depthImageNew = cv::Mat(var.height, var.width, CV_32FC1,depthValues);
normalize(newDepthImageNew, depthImageOne, 1, 0, NORM_MINMAX, CV_32FC1);
depthImageOne.convertTo(depthImageTwo, CV_16UC1, 65536.0,0.0);
imwrite("path", depthImageTwo);
规范化可能导致深度信息丢失。我使用了规范化来可视化图像。为了保存深度信息,我使用了下面的代码:
Mat depthImageNew = cv::Mat(var.height, var.width, CV_32FC1,depthValues);
depthImageOne.convertTo(depthImageTwo, CV_16UC1, 1000.0,0.0);
相关文章:
- C++:从GPU内存(cudaMemcpy2D)获取BGR图像(cv::Mat)
- 如何在 dlib 的 array2d 图像上从 dlib::rectangle 创建 cv::Mat<rgb_pixel> ?
- 如何从C 中的CV :: MAT图像中有效提取某些像素
- Mat的convertTo函数在OpenCV中将灰度图像的类型转换为CV_32F时抱怨断言错误
- 如何将OpenCV的Mat结构的部分图像矩阵加载到我自己的3x3数组中?
- 循环浏览捕获的图像 vector<cv::Mat>
- 如何将"mean_file_proto"读入OpenCV Mat,以便从平均值中减去图像以在Caffe模型中使用?
- 在 opencv 中从 Mat 图像创建多个子图像?尝试为每个连接的组件创建子图像
- 如何在 Cv::Mat 图像中放置一些文本(变量)
- 两个Mat图像的压缩比
- 在OpenCV中不使用CvSaveImage将Mat图像转换为JPG
- OpenCV:查找二进制 Mat 图像的所有非零坐标
- 使用cv::Mat图像(opencv)如何检测对象
- 如何动态更改cv::Mat图像尺寸
- 一个队列的Mat图像元素:如何
- OpenCV从Mat图像中获取像素通道值
- 如何从opencv中获取Mat图像的亮度
- 从原始缓冲区数据创建Mat图像
- C++-将RGB 1-D阵列转换为OpenCV Mat图像
- 将blob图像转换为Mat图像