查看: 1222|回复: 3

kinect彩色图作为osgART背景,出现不相容的像素格式

[复制链接]

该用户从未签到

发表于 2013-6-9 10:21:19 | 显示全部楼层 |阅读模式
如题,本人用kinect摄像头得到视频图像,经过openCV处理,由setImage函数转变成osg场景能够识别读取的图像,如下:
video->setImage(640,480,1,GL_RGB,GL_RGB,GL_UNSIGNED_BYTE,(unsigned char*)imgRGB8u->imageData,osg::Image::USE_NEW_DELETE,1);

但是再用art的tracker进行跟踪时,报错说是像素格式不兼容,“ARToolKitTracker::update<> Incompatible pixelformat!”


查了好久不知道怎么回事,kinect得到的视频已经转换成openCV能够处理的RGB图像了,setImage函数也拿到了图像指针的首地址,像素格式也按照OSG的要求设置了,可是为什么还有像素格式不相容的错误呢。。。各位大牛,本人菜鸟,求指导啊

该用户从未签到

 楼主| 发表于 2013-6-13 15:26:04 | 显示全部楼层
哎呀,为什么木有人回应的,这个怎么回事啊?我设置的纹理格式和像素格式都是GL_RGB,这个会有问题吗?osgART直接读取摄像头都可以,为什么导成openCV的图像时候格式不兼容呢?

该用户从未签到

发表于 2013-6-13 18:47:36 | 显示全部楼层
迅速地查看一下osgart的源代码就可以看到这样的字样:
  1. if (AR_DEFAULT_PIXEL_FORMAT != getARPixelFormatForImage(*_imagesource.get()))
  2. {
  3.     osg::notify(osg::WARN) << "ARToolKitTracker::update() Incompatible pixelformat!" << std::endl;
  4.     return;
  5. }
复制代码
地址为这里:https://github.com/seichter/osgA ... RToolKitTracker.cpp
那么关键是您的AR_DEFAULT_PIXEL_FORMAT是否和GL_RGB相匹配,我的印象中Windows系统的默认像素格式可能通常是BGR或者BGRA,不过这个需要您自己去判断一下,然后把视频的像素格式转换成匹配的类型

该用户从未签到

 楼主| 发表于 2013-6-17 15:47:43 | 显示全部楼层
本帖最后由 aixiche 于 2013-6-18 10:06 编辑
array 发表于 2013-6-13 18:47
迅速地查看一下osgart的源代码就可以看到这样的字样:地址为这里:https://github.com/seichter/osgART/blo ...


首先非常感谢ARRAY的回复
我在网上查到
/*------------------------------------------------------------*/
/*  For Windows                                               */
/*------------------------------------------------------------*/
#ifdef _WIN32
#  undef   AR_BIG_ENDIAN
#  define  AR_LITTLE_ENDIAN
#  define  AR_DEFAULT_PIXEL_FORMAT AR_PIXEL_FORMAT_BGRA
#endif
看出AR_DEFAULT_PIXEL_FORMAT应该是对应BGRA格式的图像,
把setImage函数改成video->setImage(640,480,1,GL_RGB,GL_BGRA,GL_UNSIGNED_BYTE,(unsigned char*)imageShow->imageData,osg::Image::USE_NEW_DELETE,1);
就成功咯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表