【发布时间】:2014-06-03 13:21:11
【问题描述】:
我有一个简单的问题:
我讨厌将 RGB 图片存储在数组中,并希望将其放入 cv:Mat。
我已经用 Kinect 传感器的深度图像完成了,如下所示:
VideoFrameRef lDepthFrame;
lStatus = gDepthVideoStream.readFrame(&lDepthFrame);
cv::Mat lDepthMat(lDepthFrame.getHeight(), lDepthFrame.getWidth(), CV_16U, (uint16_t*)lDepthFrame.getData());
我现在的问题是我不知道要为彩色图像使用哪种类型(上面我使用的是 CV_16U)。彩色图像为 RGB888/RGB24。所以它有 3 个字节大,每种颜色一个。
所以我所拥有的彩色图像是这样的:
VideoFrameRef lColorFrame;
lStatus = gRgbVideoStream.readFrame(&lColorFrame);
cv::Mat lRgbMat(lColorFrame.getHeight(), lColorFrame.getWidth(), <????>, (<????>*)lColorFrame.getData());
我需要在上面的代码中替换什么才能使这个功能起作用。
非常感谢您阅读并希望回答。如果这里有很多拼写错误,我真的很抱歉我的英语。我不是母语人士
【问题讨论】:
-
CV_8UC3 用于 RGB 图像(3 个 8 位通道)
-
谢谢,效果很好。对于 lColorFrame 之前的类型转换,我使用 (uint16_t*) 就像上面一样。因此,如果有人感兴趣,结果如下所示:
cv::Mat lRgbMat(lColorFrame.getHeight(), lColorFrame.getWidth(), CV_8UC3, (uint16_t*)lColorFrame.getData()); -
"for the typecast" - 在内部,它是一个 uchar* (但这并不重要,你如何将它投射到那里,一个 void* 会做同样的事情)