代码改变世界

稍不简易视频播放器

2013-03-09 21:49  robturtle  阅读(257)  评论(0编辑  收藏  举报

最近忙着把OpenCV2 GUI 包装得不亦乐乎。从5天前第一次实现了视频播放器,到现在把各个组件不断地解耦,封装操作。因为是第一次使用继承特性在实践上,且第一次学画UML图,没什么经验,最后本来设想得很整洁的结构迅速变乱,最后只得画繁为简,只实现需要的功能:单摄像头2D平面图像 8U 深度 RGB 图像处理与显示,现在得到的结果大致是下面的样子:

Design of Video Processor based on OpenCV2 GUI

今后有时间进一步 document 封装实现的一些 C++11 fancy 功能(爱死 initializer_list 了!)。关于尚未实现的功能,目前的计划如下:

  1. cv::waitKey 功能太弱,考虑在外部实现 timer 功能支持视频多路播放, waitKey 则由一个线程调用,负责处理键盘响应。
  2. OpenCV 的鼠标回调函数似乎比 waitKey 要好一些,至少可以绑定特定窗口,计划使用它本身的 cv::SetMouseCallbac 实现鼠标消息处理。
  3. 关于算法参数的控制面板,目前的方案有两个,一是在每个算法函数对象内部定义 static 的回调函数 bundle,重绘窗口时读取 bundle 并依次创建相关部件; 二是分别为每个算法函数对象创建对应的控制面板类,并在算法类中定义到控制面板类的类型转换函数,使得算法可以像组件一样被装载到一个窗口类的节点中。具体使用哪个方法还需要进一步考察。

因为接下来的工作需要进一步阅读手册,所以现在的重心重新回到《学习OpenCV C++ API》系列上,边学边做改进。