OpenGL中的OpenCV图像:奇怪的行为

Awa*_*ias 1 c++ opengl opencv iplimage texture-mapping

我正在使用以下代码从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;
}
Run Code Online (Sandbox Code Playgroud)

此链接是输出的屏幕截图,任何人都有类似的问题.

歪斜的问题

Mar*_*rio 5

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

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

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