多维cv :: Mat初始化和显示

时间:2015-05-22 19:17:42

标签: opencv opencv-mat

作为一名Matlab / Python人员和C ++新手,我在使用C ++进行OpenCV以实现图像处理方面感到非常沮丧。我正在使用Kinect v2,所以我在网上找到了一个我正在修改的Windows示例。

此示例将depthMap作为cv :: Mat给出,并且我已经计算了从kinect v2获取的此深度图像上的曲面法线。该表面法线图像包含每行的i,j,k矢量分量(3个通道),col元素,并且我试图将该表面法线图像(3-D浮点矩阵)可视化为RGB图像。这在matlab中很容易做到,因为你只是做了一个imshow(normMap),它显示了一个RGB(ijk)图像,颜色指定了法线的方向。

我正在尝试用C ++做类似的事情。由于我使用的是opencv,我决定使用cv :: Mat来存储每个像素的ijk通道,并将正常矩阵(让我们称之为normMat)初始化为CV_32F矩阵,如下所示:

int sizes[3] = { height, width, 3 };
cv::Mat normMat(3, sizes, CV_32F, cv::Scalar::all(0));

但是,如果我调试,dims(normMat.rows和normMat.cols)显示-1,所以我不知道我的初始化是坏的还是我错过了什么,或者是否正常。

我将表面法线组件存储为:

normMat.at<float>(i, j, 0) = fVec3[0];
normMat.at<float>(i, j, 1) = fVec3[1];
normMat.at<float>(i, j, 2) = fVec3[2];

他们似乎正在正确存储,因为我已在调试中验证过(使用normMat.at<float>(i,j,k))。

然后我试图将图像显示为:

normMat.convertTo(normColorMap, CV_8UC3, 255.0 / (4000), 255.0 / 500);
cv::imshow("Normals", normColorMap);

但是第二行抛出异常:

OpenCV Error: Assertion failed (p[-1] 
<= 2) in cv::MatSize::operator.....

我还尝试直接显示normMat,这会引发相同的异常。这意味着将3通道图像显示为3D矩阵或将其转换为2D-3通道垫显然有问题。我也尝试将normMat初始化为

cv::Mat normMat(height, width, CV_32FC3, cv::Scalar::all(0));

但是如果我这样说的话,我在向“2D 3通道矩阵”(CV_32FC3)的3个通道添加数据时遇到了问题。

我想要做的就是将此normMat显示为RGB图像。任何意见,建议都非常感谢。谢谢!

0 个答案:

没有答案