gpt4 book ai didi

C#和Matlab读取视频帧rgb值的区别

转载 作者:太空宇宙 更新时间:2023-11-03 15:56:34 25 4
gpt4 key购买 nike

我正在尝试将 matlab 脚本转换为 C#。 matlab 脚本读取 .avi 视频文件,并为视频中的每一帧计算红色、绿色和蓝色像素的平均值,然后将它们放入矩阵中。所以我将 red.mean 、 green.mean 和 blue.mean 值存储到视频文件中每一帧的矩阵中。

为了在 c# im 中实现这一点,我使用 Aforge 框架,它有一个 AVIreader 类以及一个图像统计类,它为给定图像提供 rgb 平均值。我遇到的问题是 matlab 为帧计算的平均值与 c# 为帧计算的平均值不匹配。它们很相似,彼此之间的误差在 0.5 左右,但我觉得它们应该是相同的。

C# 使用 15 个 sigfigs 作为平均值,所以我要求 matlab 做同样的事情以消除舍入错误的可能性,但它并没有真正改善结果。

所以这是踢球者......

我决定从 google 上取一张随机的 jpeg 图像并将其加载到 matlab 中并将其 rgb 像素值分成三个单独的矩阵。我选择了 r 矩阵并使用 histc() 函数来计算有多少 r 值的值等于 0-255 范围内的数字之一。

使用相同的图像,我在 C# 中做了完全相同的事情,我打开图像并将其转换为位图,然后使用 Aforge 的 ImageStatistics 为我提供图像中 r 值的直方图。

当我将 matlab 中给出的直方图与 C# 中给出的直方图进行比较时,它们非常相似,但对于 0-255 之间的某些值,一个直方图的值会大于或小于另一个。本质上,出于某种原因,C# 和 Matlab 以不同方式解释图像中的像素值,我想知道为什么?

最佳答案

你在Matlab中检查过RGB矩阵的数据类型吗?这些值可能存储为整数。

>> A=magic(25);
>> B=uint8(A);
>> mean(mean(A))

ans =

313

>> mean(mean(B))

ans =

203.1840

>>

关于C#和Matlab读取视频帧rgb值的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23305765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com