2013-03-08 122 views
1

我从avi视频中获取帧,并通过Matlab打开彩色图像并检查三个通道R,G,B的像素值。 (情况1)Matlab与Opencv之间的图像像素值差异

之后,我使用opencv2.4.3获取帧并通过txt文件保存像素值。然后,我检查txt文件,我意识到像素值不同于Matlab(我知道opencv打开的彩色图像是BGR,并且像素的索引位置必须是负1(在Matlab中,像素位置(x,y))。在c ,像素位置(x-1,y-1)))。 (情况2)

最后,我使用opencv通过cvSaveImage函数保存帧,然后通过Matlab打开这个帧。在这种情况下,像素值也不同于以上两种情况。

为什么会发生这种情况?

谢谢你的回答!对不起我的英语!

这是我的代码 http://www.scribd.com/doc/129263549/Code(你必须下载阅读)

+2

我猜你试过了JPEG格式,这是默认有损。尝试一种无损格式;它应该是一样的。 – 2013-03-08 07:13:19

+0

第三种情况并不重要。但在第一种情况和第二种情况下,我从avi图像获取帧并直接处理数据。 在opencv中,我使用cvCaptureFromAVI和cvQueryFrame来获取帧校验值 在Matlab中,我使用VideoReader并读取帧,然后imshow来检查值。 和两个值是不同的! – 2013-03-08 07:50:09

+0

请在问题中包含代码的相关部分,而不是链接到需要注册的某个下载站点。 – Junuxx 2013-03-08 10:43:00

回答

1

Matlab和OpenCV的具有存储像素值的不同方式。 Matlab使用压缩在存储它们之前保存.jpeg图像。因此,如果您在Matlab和OpenCV中查看类似图像的像素数据,它看起来会有所不同。

如果在Matlab和OpenCV中加载并保存相同的源图像,前者将为,比更小;即使你没有对图像进行任何操作。

您无法让两个图像数据看起来都一样。幸运的是,对图像所做的任何操作都不会受到内部结构差异的影响。例如,如果您尝试在Matlab和OpenCV中查找某些像素的索引,则两者都会给出正确的值,尽管这些值看起来不一样。