我正在用 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 中实现光流算法,以便能够仅使用视觉输入实时估计相机姿态。