最近在做Kinect跟踪的时候需要做视差图与蒙版的运算。因为图片很多,所以想利用OpenGL的GLSL来加速。做到最后发现生成的图像不对!自习检查了代码流程,没发现问题。
单步调试的时候看到图像变量有数据也没有追究,浪费N个小时之后,决定去掉各种复杂功能,单独用GLSL显示一张图片看看效果。
于是发现了问题所在:
就是用OpenCV读取图片的问题。最简单的就是用OpenCV自带的函数,一句代码即可读取一张图片到内存。
几点说明:
- 用 imread() 函数读取图片,保存在Mat类型变量里面;
- 用imshow() 函数显示该图片的时候显示正常!!(这里极具迷惑性!!)
- 但是!用OpenGL的glDrawPixels()函数显示不正常;用GLSL显示(纹理)不正常。但是不正常的这两个是一样的,具体可见下面的对比。
- 试过3通道,4通道的图像,结果一样
- 有的jpg图像能正常显示,有的不能(求大神解释==)
可以看到:
- 结果图是上下颠倒的(看”1“的尖端)