我从kinect v2获得了类型为CV_8UC4的图像。 现在我尝试在类型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),不确定我是否正确使用此功能。请帮忙。
答案 0 :(得分:2)
取决于您想要实现的目标。 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];
答案 1 :(得分:1)
从其他链接中找到一些线索。
CV_8UC4到CV_8UC1不是渠道问题所以不要使用convertTo。
cvtColor(mImg,mImg2, CV_BGR2GRAY);
改用cvtColor,现在改变了类型。虽然图像是灰色的,但我认为我的方法是正确的。