我正在用Java开发一个简单的(或者至少是这样的)桌面应用程序来进行实时图像处理。我选择使用Java Media Framework(JMF)访问视频帧。我有一个PAL相机,并使用EasyCAP视频转换器进行数字化。该设备在我的Windows机器上作为VFW设备可见,允许YUV和24位RGB格式采集(32位不可用)。
我已经找到了框架的基础知识。我正在使用 javax.media.Processor 进行媒体数据控制,并且最初想要添加灰度编解码器(实现 javax.media.Codec )进一步渲染。在编解码器中,我可以访问单个帧作为 javax.media.Buffer 对象。
在Java中进行灰度转换的最快方法是什么?我想坚持像JAI这样的标准,因为我希望能够轻松地进行进一步的转换使用相同的框架/方法。
到目前为止,我一直在考虑以下事项:
在编解码器链的开头添加编解码器,将24位RGB转换为32位RGB。比使用java.nio.ByteBuffer将byte []转换为int []像素数组,以便使用 javax.awt.image 过滤器进行进一步处理。我已经尝试使用 com.sun.media.codec.video.colorspace.RGBConverter 来实现这一目标,但没有成功。
我真的很感激任何帮助,希望有人已经这样做了。
我对任何有关整体应用程序架构的建议表示感谢。我的总体目标是在Java中实现光流算法,以便能够仅使用视觉输入实时估计相机姿态。
答案 0 :(得分:0)
在JH Labs(http://www.jhlabs.com/ip/filters/index.html)查看此库。
它有源代码。您可以在那里检查实施...具体GrayscaleFilter
..也请在使用前检查许可证。如果你喜欢它,那么请归功于原作者.. :))