我从CV_8UC4类型的kinect v2得到了图片。现在我试着用下面的代码在CV_8UC1类型中使用。
cv::Mat mImg(iHeight, iWidth, CV_8UC4);
cv::Mat mImg2(iHeight, iWidth, CV_8UC1);
....
get image from kinect to mImg
....
mImg.convertTo(mImg2, CV_8UC1);
在那之后,mImg2类型仍然是24 ( CV_8UC4 ),不确定我是否正确使用了这个函数。请帮帮忙。
发布于 2016-03-15 16:35:22
从其他链接中找到一些线索。
CV_8UC4到CV_8UC1不是通道问题,所以不要使用convertTo。
cvtColor(mImg,mImg2, CV_BGR2GRAY);
改为使用cvtColor,现在类型已更改。虽然图像变成了灰色,但我认为我找到了正确的方法。
发布于 2016-03-15 18:36:37
这取决于你到底想要实现什么。Kinect可能会以{x,y,depth,somethingelse_forexamplecolor}的形式返回数据,所以如果你想在单独的Mat中获得深度数据,你可以使用split():
vector<cv::Mat> channels(4);
cv::split(mImg, channels);
cv::Mat depth = channels[2]; //or other than 2
但您可以将数据放在一起,通过以下方式进行访问:
char depth = mImg.at<cv::Vec4b>(x,y)[0];
https://stackoverflow.com/questions/36005750
复制相似问题