繁体   English   中英

具有Videocodec的WriteVideoFrame()。原始更改像素值

[英]WriteVideoFrame() with Videocodec.Raw change pixel value



我正在使用Accord.Video.ffmpeg在c#中录制视频。 它实际上是一个深度视频,其中的像素指示了深度大小。 从深度数组中,我创建一个位图,然后使用WriteVideoFrame方法保存该位图。
之后,我在Matlab中逐帧打开视频。 问题是我在c#中的位图和Matlab中的帧之间有区别吗? 差异大约为10(在255的范围内是个大问题)(目前测试是否为常数)。
因为从位图到视频帧我不执行任何操作,所以我认为问题出在视频编码器中。 即使格式为Raw也可以吗?
提示?
亚历克斯

UPDATE

如果我在新项目中运行此代码,一切都很好

unsafe private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        writerdepth.Open("testvideo.avi", 512, 424, 15, VideoCodec.Raw);
        for (int i = 0; i <depthPixels.Length; i++)
        {
            this.depthPixels[i] = (byte)100;
        }


        try
        {
            fixed (byte* p = depthPixels)
            {
                IntPtr unmanagedPointer = (IntPtr)p;
                depthbm = new Bitmap(512, 424, 512, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, unmanagedPointer);
            }

        }
        catch (Exception ex)
        {
            Debug.WriteLine("Errore");
        }

        writerdepth.WriteVideoFrame(depthbm);
        writerdepth.Close();
    }
}

回到我尝试读取图像而不是RGB = [100100100]的代码时,我得到了[96 94 99]。
我的起始代码是从kinect v2保存深度图像,当新的有效帧到达时调用该函数。
我不知道这种差异的原因...

解决了...是Nuget软件包,我在较旧的项目中有3.4.2-alpha版本(奇怪的行为),而新的3.5.0是最后一个(正在工作)。 更新软件包即可解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM