PYOPENGL保存图像到内存

虽然通过opengl的绘制、渲染能力很强大,但是如果想在其他地方用到opengl渲染过的图片,那该怎么办呢?可以将opengl的窗口中的图片截图保存下来,但是要想实现自动的保存呢?自动的保存可以通过读取opengl缓存中的数据的方法:

def grap(w, h):
'''
w:窗口的宽
h:窗口的高
'''
    data = []
    glReadBuffer(GL_FRONT)
	#从缓冲区中的读出的数据是字节数组
    data = glReadPixels(0, 0, w, h, GL_RGB, GL_UNSIGNED_BYTE)
    arr = numpy.zeros((h*w*3), dtype=np.uint8)
    for i in range(0, len(data), 3):
    	#由于opencv中使用的是BGR而opengl使用的是RGB所以arr[i] = data[i+2],而不是arr[i] = data[i]
        arr[i] = data[i+2]
        arr[i+1] = data[i+1]
        arr[i+2] = data[i]
    arr = numpy.reshape(arr, (h, w, 3))
    #因为opengl和OpenCV在Y轴上是颠倒的,所以要进行垂直翻转,可以查看cv2.flip函数
    cv2.flip(arr, 0, arr)
    cv2.putText(arr, "Opencv", (40,40), cv2.FONT_ITALIC, 1, (0,255,0))
    cv2.putText(arr, "Miha_Singh", (40, 70), cv2.FONT_ITALIC, 1, (0, 255, 0))
    cv2.imshow('scene', arr)
    cv2.waitKey(1)
    

效果图:
在这里插入图片描述

获取到opengl中的缓存数据后,就可以按照想法处理获得的图片啦,保存更是完全没问题了。但是还有一个未解决的问题,要想获得opengl处理过得图片,就必须同时显示opengl的显示图片的窗口,如果我只想获得opengl处理过得图片但是不想要opengl去显示图片(离屏渲染),该怎么做呢?还请知道的朋友留言,万分感激!

猜你喜欢

转载自blog.csdn.net/Miha_Singh/article/details/85008578
今日推荐