我想加載opencv :: mat圖像與alpha通道OpenGL紋理。加載OpenCV :: mat圖像與opengl紋理中的alpha通道
在以下帖子的幫助下,我可以從opencv :: mat中將RGB圖像加載到OpenGL紋理中。
https://stackoverflow.com/questions/16809833/opencv-image-loading-for-opengl-texture
但是當我嘗試用alpha通道來加載圖像,有一個問題。
這裏是glTexImage2D函數的調用方式。
glTexImage2D(GL_TEXTURE_2D, // Type of texture
0, // Pyramid level (for mip-mapping) -
GL_RGBA, // Internal colour format to convert to
image.cols, // Image width
image.rows, // Image height
0, // Border width in pixels (can either be 1 or 0)
GL_BGRA_INTEGER, // Input image format
GL_UNSIGNED_BYTE, // Image data type
image.ptr()); // The actual image data itself
另外,在渲染之前,我使用glEnable(GL_BLEND)來啓用混合;
如果我指定輸入圖像格式和內部顏色格式都是GL_RGBA/GL_BGRA,我會得到一個分割錯誤,但是如果我將它們中的任何一個或兩者都設置爲GL_RGBA_INTEGER,至少我可以看到窗口,但只是空白。
我可以更改透明度,因此窗口變得或多或少透明,但其中沒有圖像。在cv :: mat中有一個圖像,因爲我可以使用cv :: imshow來看它,但不知何故似乎有一個問題將它傳遞給OpenGL紋理。
任何人都可以建議我可能會丟失的東西。提前致謝。
P.S:我是新來的OpenGL,我會很感激,如果有微小的細節解釋..:P
用'GL_UNSIGNED_BYTE'一起使用時,'_INTEGER'像素傳輸格式不使有很大的意義,這些都是特殊的新打包整數格式,如'UNSIGNED_SHORT_5_5_5_1'(16位,其中每個組件是分數整數類型的一部分)。如果你打算使用GL_BGRA_INTEGER,那麼嘗試使用'UNSIGNED_INT_8_8_8_8'而不是'GL_UNSIGNED_BYTE',這至少是合理的。 –
爲什麼你要使用整數圖像格式?傳統的定點/無符號歸一化幾乎肯定是你想要的,你會很清楚爲什麼/當你需要一個實際的整數格式時。 –
對不起,這麼晚回來。我只是在第一步中犯錯,而在opencv中讀取圖像。一旦我糾正它,我只能使用GL_BGRA。謝謝 – formjk