用FrameBuffer实现无Highgui库的OpenCV程序的图片显示

还记得上一篇关于OpenCV移植到FPGA上的文章里,我只写了BMP图片的读写,关于如何显示,因为毕设没有需要,我也没有深入去弄。
后来几次有网友发邮件过来询问,很无奈自己也未曾尝试,更何况做毕设实验的板也早已经还给学校,这个部分就一直搁浅着。直到前一段lanying兄的来信,这个事情才有新的进展。

有个可能比较好的方案是使用GTK那些成熟的库然后整合上OpenCV来实现,这里只介绍一个初级的,也是lanying兄验证完的一个方法,就是使用FrameBuffer来显示图片

首先引用下别人的一点基础介绍

FrameBuffer 是出现在 2.2.xx 内核当中的一种驱动程序接口。
Linux是工作在保护模式下,所以用户态进程是无法象DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出 FrameBuffer这个设备来供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象掉,可以通过 Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接 进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由 Framebuffer设备驱动来完成的。

但是呢,FrameBuffer同时也有很大的限制,比如分辨率这些在系统设置里面如果设定完了,就不能实时更改了,同理包括显示的颜色深度。相关方面的东西请自行了解,这里只给个小链接让大家看看:http://www.91linux.com/html/article/kernel/20071204/8805.html

然后就像上次提到的图片读取的编写,要读取什么格式的图片,你自己必须对那种格式的编码存储结构很了解,然后才在那基础上继续进行。因为FrameBuffer的显示图片的思路是,自己读取图片文件的像素信息,然后按照每一行每一列逐一将像素点的信息写入到FrameBuffer对应的内存空间上。

这次只说个实现思路,具体的技术细节因未亲身验证所以不妄加解说,只是与lanying兄信件往来不时了解下,下面给出一个例程给大家参考,由于没有板验证,所以诸位看代码的时候如果有小细节错误,还望见谅。

http://blog.tyreal.net/download/FrameBuffer

若你有更好的方案,请来信tyreal.han@gmail.com赐教,不胜感激

Tagged

One thought on “用FrameBuffer实现无Highgui库的OpenCV程序的图片显示

  1. Rain说道:

    Deilige bilder av pusene. Det er virkelig typer som vet å kose seg inne i regnet, ja. Eg har ei som liker seg på hylla under saroogbnldet og en som liker seg i vasken på badet. Han fyller den godt ut etterhvert med sine 8.4 kg, men synes vist det er deilig å ligge der:)

发表评论

电子邮件地址不会被公开。