如何将IplImage转换为GLubyte数组?

时间:2013-11-26 06:42:36

标签: opengl opencv

我有一个函数可以读取图像并使用各种openCV函数对其进行一些图像处理。现在我想使用openGL将图像显示为纹理,即使无法进行此转换,cv :: Mat数组与Glubyte数组之间的转换也可以。

1 个答案:

答案 0 :(得分:0)

这取决于IplImage / cv::Mat中的数据类型。 如果它是CV_8U类型,则像素格式已经正确,您只需要:

  1. 确保您的OpenCV数据具有与OpenGL上下文相关的正确颜色格式(OpenCV通常使用BGR颜色通道排序而不是RGB)
  2. 如果您的原始图片有某种方向,则需要使用cvFlip() / cv::flip()垂直翻转它。理性的背后是OpenCV在左上角有一个坐标框架的原点(y轴向下),而OpenGL应用程序通常在底部有一个原点(y轴向上)
  3. 使用data的{​​{1}}指针字段来访问像素数据并将其加载到OpenGL中。
  4. 如果您的图像数据采用的格式不是CV_8U,则需要先使用函数IplImage / cv::Mat将其转换为此像素格式。