我已经研究这个问题好几天了,检查了多个程序和库,但无济于事。我在 Windows 10 x64 PC 上工作。注意:这个问题似乎已经被 Linux 发行版上的某个人解决了,我的同事正在研究这个问题,但到目前为止还没有成功。
我有一台带有 12 位 RCCB 传感器的摄像机。它附带一个解串器,该解串器具有插入我电脑的 USB 输出。硬件供应商还提供了某些软件来显示摄像机输出。但是,数据被包装到 YUY2(又名 YUV422)中(据我所知,没有对其进行任何其他操作;它仍然是马赛克 12 位 RCCB 摄像机帧)。因此,供应商的软件将该帧解释为 12 位 YUY2(即每 2 个像素 24 位),从而产生绿色马赛克图像。其他程序也会自动应用 YUY2 解码(毕竟,摄像机会告诉它们这样做),据我分析,这会导致不可逆转的数据丢失。
生成的图像是不是只是单色呈现绿色,即使亲爱的编辑 Scott 在此处插入了它(真诚感谢编辑工作!)。它的红色和蓝色成分很少,但这不是重点。示例图像如下所示:
我对数据丢失原因的假设有两个方面:首先,解码器需要去马赛克的 RGGB 图像,这会导致绿色部分(YUV 图像的 RGB 表示)出现“溢出”,其次,程序从相机获取有关图像大小的信息,去马赛克时的大小会输入其中。这一事实,加上原始数据的位数/像素比输出图像多,使我相信信息丢失了。
当然,在无法从绿色图像重建原始图像后,我研究了在应用 YUY2 解码之前访问信息的方法,但同样没有成功。我尝试了 openCV(我熟悉)、ffdshow、VLC、FWink 和 RawTherapee。
目前我正在研究如何通过 libusb 抓取 USB 数据流,但我多次读到过这也不是一件容易的事。因此,如果您能提供任何有关我还可以尝试什么的信息和建议,我将不胜感激。
如果我有来自流的一些十六进制或二进制文件输出,无论是否带有 YUY2 包装器,这对我来说已经足够了;我可以使用它。