实现opengl截取窗口图像到内存,然后用cv处理
来源:互联网 发布:idp诺思留学知乎 编辑:程序博客网 时间:2024/06/07 23:56
目前想实现opengl截取窗口图像到内存,然后用cv处理,所以需要用cv从内存把图像再取出来。可是一直是灰色的,代码稍作改动后会变成黑色加乱码
直接附上部分转换代码:
GLint iViewport[4] = { 0 };
glGetIntegerv(GL_VIEWPORT_BIT, iViewport);// 获取视图大小
GLubyte* buffer = (GLubyte*)malloc(iViewport[2] * iViewport[3] * sizeof(GLubyte)* 3); //开辟内存
//读gl的屏幕像素点到内存
glReadPixels(iViewport[0], iViewport[1], iViewport[2], iViewport[3], GL_RGB, GL_UNSIGNED_BYTE, buffer);
//将图像保存到IplImage中;
IplImage* model2DImg = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
//复制地址,所以最后不能free(buffer);
model2DImg->imageData = (char*)buffer;
cvNamedWindow("result", 1);
cvShowImage("result", model2DImg);
//cvWaitKey(); //等待响应时间10ms;
cvReleaseImage(&model2DImg);
free(buffer);
glutMainLoop();//循环
return(0);
运行结果是一个是本程序显示的模型窗口,另一个是由cvshowimage从内存中显示出来的图像,但是后者一直是灰色的,不知道是glreadpixels读的格式问题还是IpIImage这里开始的问题,总之就是想找到opengl到opencv的接口,实现GL窗口图像到CV窗口的传输,然后用CV进行图像处理;最后的free和释放问题我也试过了,有没有都好像无所谓,就是传不过来图像一片灰。
直接附上部分转换代码:
GLint iViewport[4] = { 0 };
glGetIntegerv(GL_VIEWPORT_BIT, iViewport);// 获取视图大小
GLubyte* buffer = (GLubyte*)malloc(iViewport[2] * iViewport[3] * sizeof(GLubyte)* 3); //开辟内存
//读gl的屏幕像素点到内存
glReadPixels(iViewport[0], iViewport[1], iViewport[2], iViewport[3], GL_RGB, GL_UNSIGNED_BYTE, buffer);
//将图像保存到IplImage中;
IplImage* model2DImg = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 1);
//复制地址,所以最后不能free(buffer);
model2DImg->imageData = (char*)buffer;
cvNamedWindow("result", 1);
cvShowImage("result", model2DImg);
//cvWaitKey(); //等待响应时间10ms;
cvReleaseImage(&model2DImg);
free(buffer);
glutMainLoop();//循环
return(0);
运行结果是一个是本程序显示的模型窗口,另一个是由cvshowimage从内存中显示出来的图像,但是后者一直是灰色的,不知道是glreadpixels读的格式问题还是IpIImage这里开始的问题,总之就是想找到opengl到opencv的接口,实现GL窗口图像到CV窗口的传输,然后用CV进行图像处理;最后的free和释放问题我也试过了,有没有都好像无所谓,就是传不过来图像一片灰。
到底是glread没存到内存中还是cv没读出来呢?希望大大们告知一下,或者有没有更好的方法?
方法:
IplImage* model2DImg = cvCreateImage(cvSize(640, 480), IPL_DEPTH_8U, 3);
最后就是要加个cvFlip(model2DImg, NULL, 0);
因为gl和cv在Y轴上颠倒
阅读全文
0 0
- 实现opengl截取窗口图像到内存,然后用cv处理
- C#-Emgu.CV-------视频截取和图像处理基础
- Cv图像处理
- Opengl简单图像处理
- Open CV 学习笔记: 形态学图像处理
- 图像截取的后台处理
- 关于图像采集卡采集到图像到内存后怎样用Opencv进行图像处理
- VFP 截取被遮掩的窗口图像!
- Qt截取窗口到保存到图片
- NY12图像的截取实现
- opencv3实现图像裁剪和图像填充(cv::copyMakeBorder)
- 运用OpenGL ES 2.0实现各种各样图像滤镜(图像处理)效果,多达50多种效果。
- ASP截取域名,然后跳转到不同的页面
- 图像处理---内存法
- CV-机器视觉、图像处理方面的书籍
- 图像处理之使用人机交互截取图片
- CImage实现jpeg到bmp内存图像转换
- opengl实现图像亮度调整
- Dubbo+Zookeeper实现分布式服务和负载均衡
- LightOJ-1259
- js中typeof()方法使用
- 关于1>uafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI
- 走进Redis:Redis的安装、使用以及集群的搭建
- 实现opengl截取窗口图像到内存,然后用cv处理
- Oracle的memory_max_target和memory_target修改和ORA-00845: MEMORY_TARGET not supported on this system错误解决
- MYSQL存储过程循环CURSOR(游标)使用
- 效率问题
- spark JVM调优之原理概述以及降低cache操作的内存占比
- 容器/中间件管理数据库连接-
- scala Collection 运算符
- http、TCP/IP协议与socket之间的区别
- shell编程基础知识点