Хорошо.как я вчера узнал, cv::imshow
не позволил мне использовать команды OpenGL в этом окне.
Итак, что мне нужно было сделать, чтобы преодолеть это, было прочитать данные на cv::Mat
, как и раньше,Но вместо того, чтобы визуализировать cv::Mat
прямо в окне, используя cv::imshow
, мне пришлось сначала сохранить данные на текстуре, а затем отобразить эту текстуру на экране.Для хранения данных на текстуре я использовал следующий метод:
/**
*texture: Pointer to OpenGL texture that we want to render our stream on.
*data: cv::Mat that contains the data we want to render.
**/
void storeStreamToTexture(GLuint texture, cv::Mat* data){
//Bind the texture we want to render to.
glBindTexture(GL_TEXTURE_2D, texture);
//we flip the Mat to start reading from the beginning.
cv::flip(*data, *data, 0);
//Store mat data to our texture.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, data->cols, data->rows, 0, GL_BGR, GL_UNSIGNED_BYTE, data->data);
}
И после этого мы можем использовать нашу текстуру так же, как мы использовали бы любую другую текстуру в OpenGL.Надеюсь, кто-то найдет это полезным в будущем!:)