首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CV_8UC4 convertTo CV_8UC1不工作

CV_8UC4 convertTo CV_8UC1不工作
EN

Stack Overflow用户
提问于 2016-03-15 16:16:27
回答 2查看 2.9K关注 0票数 1

我从CV_8UC4类型的kinect v2得到了图片。现在我试着用下面的代码在CV_8UC1类型中使用。

代码语言:javascript
运行
复制
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 ),不确定我是否正确使用了这个函数。请帮帮忙。

EN

回答 2

Stack Overflow用户

发布于 2016-03-15 16:35:22

从其他链接中找到一些线索。

CV_8UC4到CV_8UC1不是通道问题,所以不要使用convertTo。

代码语言:javascript
运行
复制
cvtColor(mImg,mImg2, CV_BGR2GRAY);

改为使用cvtColor,现在类型已更改。虽然图像变成了灰色,但我认为我找到了正确的方法。

票数 2
EN

Stack Overflow用户

发布于 2016-03-15 18:36:37

这取决于你到底想要实现什么。Kinect可能会以{x,y,depth,somethingelse_forexamplecolor}的形式返回数据,所以如果你想在单独的Mat中获得深度数据,你可以使用split():

代码语言:javascript
运行
复制
vector<cv::Mat> channels(4);
cv::split(mImg, channels);
cv::Mat depth = channels[2]; //or other than 2

但您可以将数据放在一起,通过以下方式进行访问:

代码语言:javascript
运行
复制
char depth = mImg.at<cv::Vec4b>(x,y)[0];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36005750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档