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)
此链接是输出的屏幕截图,任何人都有类似的问题.

这里的问题是IplImage内存中的一行可能比实际使用的图像宽(这是由于性能原因).你正在使用正确的轨道glPixelStorei(GL_UNPACK_ALIGNMENT, 1);- 只是错误的价值.
举个简单的例子,想象一个3像素宽的图像.因此,一行(RGB)基本上由9个字节(字节对齐;行之间没有间隔),10个字节(偶数字节对齐;行间1个字节空间),12个字节(字对齐;行间3个字节空间)或16个字节组成(双字对齐;行之间有7个字节的空格).
现在无法查找,但我认为默认情况下IplImage的行在字边界处对齐.由于您使用RGB(每像素3个字节;而不是4个字节),这是一个问题.只是尝试不同的值,我认为你需要单词对齐(glPixelStorei(GL_UNPACK_ALIGNMENT, 4);).
| 归档时间: |
|
| 查看次数: |
1141 次 |
| 最近记录: |