【问题标题】:OpenCV image in OpenGL: Strange behaviourOpenGL中的OpenCV图像:奇怪的行为
【发布时间】:2012-03-13 23:45:07
【问题描述】:

我正在使用以下代码从 IplImage 创建和显示纹理。它的工作时间大约有一半,但有时会歪斜图像,我认为这与纹理填充有关,但我需要修复帮助。

int loadTexture_Ipl(IplImage *image, GLuint *text) {
    if (image==NULL) return -1;
    glGenTextures(1, text);
    glBindTexture( GL_TEXTURE_2D, *text );
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, image->width, image->height,0, GL_BGR, GL_UNSIGNED_BYTE, image->imageData);
    return 0;
}

此链接是输出的屏幕截图,以防有人遇到类似问题。

【问题讨论】:

  • glBegin/End() 例程怎么样?

标签: c++ opengl opencv texture-mapping iplimage


【解决方案1】:

您的问题是内存中IplImage 的一行可能比实际使用的图像宽(这是由于性能原因)。使用 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 您在正确的轨道上 - 只是使用了错误的值。

举个简单的例子,想象一个 3 像素宽的图像。所以一行 (RGB) 基本上由 9 个字节(字节对齐;行之间没有间距)、10 个字节(偶数字节对齐;行之间的 1 个字节空间)、12 个字节(字对齐;行之间的 3 个字节空间)或 16 个字节组成(双字对齐;行之间有 7 个字节的空间)。

现在无法查找,但我认为 IplImage 的行默认在字边界处对齐。由于您使用 RGB(每个像素 3 个字节;不是 4 个字节),这是一个问题。只需尝试不同的值,我认为您需要单词对齐 (glPixelStorei(GL_UNPACK_ALIGNMENT, 4);)。

【讨论】:

  • 这似乎成功了!非常感谢您的快速响应!
猜你喜欢
  • 1970-01-01
  • 2017-08-02
  • 1970-01-01
  • 2013-07-18
  • 2010-10-03
  • 2015-08-29
  • 2012-12-24
  • 2016-03-03
  • 2015-10-15
相关资源
最近更新 更多