如何将IplImage转换为GLubyte数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将IplImage转换为GLubyte数组?相关的知识,希望对你有一定的参考价值。

我有一个读取图像的函数,并使用各种openCV函数对其进行一些图像处理。现在,我想使用openGL将该图像显示为纹理。为此,如何在cv::Mat数组和Glubyte数组之间进行转换?

答案

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

  1. 确保你的OpenCV数据具有与OpenGL上下文相关的正确的颜色格式(OpenCV通常使用BGR颜色通道排序而不是RGB)。
  2. 如果你的原始图像有一定的方向性,那么你就需要在垂直方向上使用 cvFlip() / cv::flip(). 背后的原因是OpenCV的坐标帧起源于左上角(y轴向下),而OpenGL应用的坐标帧起源于底部(y轴向上)。
  3. 使用 data 的指针域 IplImage / cv::Mat 以获取像素数据的访问权并将其加载到OpenGL中。

如果您的图像数据是CV_8U以外的其他格式,那么您需要先使用函数 cvConvertScale() / cv::Mat::convertTo().

以上是关于如何将IplImage转换为GLubyte数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 8 位 OpenCV IplImage* 转换为 32 位 IplImage*?

将 GLubyte* 转换为 GLuint* 用于 alpha 纹理 Opengl 3.0 / c++ / Win32

opencv编程中cvMat到Mat如何进行数据转换?

android:如何将 int[] 转换为 OpenCV Mat c++?

C ++ OpenCV,IplImage到双数组

Iphone 将 IplImage 转换为 UIImage 图像变蓝