【问题标题】:Artifacts appear using imread function from opencv使用来自 opencv 的 imread 函数出现伪影
【发布时间】:2015-10-16 13:11:06
【问题描述】:

我使用 imread 函数读取一个 jpeg 文件并将 rgb 图像保存为 bmp 格式。比较这两个文件,我发现工件出现并使用绿色圆圈表示工件。 OpenCV的版本是3.0。我在打开 SSE、SSE2 和 SSE3(默认设置)的情况下自己编译库。我的操作系统是 windows 7 专业版。您可以使用下图进行检查。

original jpeg image

saved bmp file

如果我在 Matlab 中读取 jpeg 文件,则 rgb 图像是正确的。我在 Matlab 中以 png 格式保存 rgb 图像,使用 opencv 读取 png 文件并将加载的图像保存在 bmp 文件中。一切都好。 jpeg解码器似乎有问题。使用的 jpeg 库是 libjpeg.lib。

由于尺寸限制,我从第二张图片中剪切了补丁。

【问题讨论】:

  • 我在我的手机上看不到两个图像之间的差异。你能解释一下这些文物的样子以及它们在哪里可见吗?
  • 在第二张图片中,有一个绿色圆圈,其中出现了几条水平的粉红色线条。在原始图像中,这样的线条不存在。
  • 抱歉,我在第二张图片中看不到绿色圆圈或粉色水平线。你确定你上传了正确的文件吗?!?
  • 在我的电脑上,我可以从第二张图片的链接中看到绿色圆圈。我剪切了包含工件的补丁并将补丁粘贴到帖子中。
  • 好的......它在第二张图片中可见,但对于我的手机显示来说太小了。

标签: matlab opencv jpeg libjpeg


【解决方案1】:

您总是会在 JPEG 中得到一些伪像。您可以通过更改所使用的量化表(通常会丢失压缩)来减少此类伪影的出现。

JPEG 编码器通常使用“质量”设置来更改量化表。

【讨论】:

  • 我同意你对 jpeg 编码器可能产生的工件的看法。但是,在我使用 imread 功能时会出现伪影。这意味着工件是由 jpeg 解码器而不是 jpeg 编码器生成的。
  • 只需要解码JPEG图像,本质上是有损压缩。 BMP图像只将图像数据封装在bmp文件中。
  • BMP 使用 RLE 压缩。
猜你喜欢
  • 1970-01-01
  • 2018-11-29
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2018-08-26
  • 1970-01-01
相关资源
最近更新 更多