c++ - 使用 OpenCV 映射 OpenGL
问题描述
我无法从 OpenCV 图像中获取图像以映射到 OpenGL 中的 2D 平面。每当我尝试使用下面的代码将图像渲染到平面上时,我得到一个黄色平面而不是它上面的实际图像。
// My Init code
cv::Mat mat(640, 480, CV_8UC3, cv::Scalar(255, 0, 0));
GLuint tid = 0;
if (tid != 0)
{
glDeleteTextures(1, &tid);
}
glGenTextures(1, &tid);
glBindTexture(GL_TEXTURE_2D, tid);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, mat.cols, mat.rows, 0, GL_BGR, GL_UNSIGNED_BYTE, (void*)mat.data);
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_2D, 0);
.
// My Render Code
{
glPushMatrix();
glMatrixMode(GL_MODELVIEW);
glTranslatef(0, 0, 0);
glBindTexture(GL_TEXTURE_2D, tid);
GLfloat sq_vert[] = {-1, -1, 1, -1, 1, 1, -1, 1};
glVertexPointer(2, GL_FLOAT, 0, sq_vert);
glEnableClientState(GL_VERTEX_ARRAY);
GLfloat sq_tex[] = {0, 0, 1, 0, 1, 1, 0, 1};
glTexCoordPointer(2, GL_FLOAT, 0, sq_tex);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glPopMatrix();
}
解决方案
我解决了我的问题。我需要在我初始化 OpenGL 上下文的同一个线程中运行上面的 initialize() 代码。
推荐阅读
- matlab - Matlab编程中的循环函数
- node.js - 在 Adonis.js 为什么 refreshToken 为空?
- javascript - puppeteer 打开 chrome 时无法使用 chrome 扩展
- xamarin - Xamarin 表单切换事件导致无限循环 - 组切换
- tensorflow - 如何在 Keras 中完成模型
- mysql - 用于删除重复电子邮件的数据库 SQL 查询
- powerbi - 如何通过给定参数提取列,然后在 Power BI 中汇总列总数
- java - Java中的每个请求都需要缓存能力
- swift - Swift4 中的命令行处理序列
- ios - 如何在 Swift5 上检查 App Store 中是否有我的应用程序的新版本?