如何在C++或OpenCV中调整图像大小而不失去图像质量

4
  • 我正在进行一个项目,需要对图片进行放大。

  • 我尝试使用OpenCV库的re size函数进行调整大小。但是图片质量降低了。

  • 假设我有一张136x136大小的图片,我想将其调整为209x209并保持相同的质量。我该怎么做?


2
“同样的质量”是什么意思?如果你增加尺寸,就会添加像素。这将引入伪影,因为你无法猜测细节应该看起来如何。你可以尝试使用不同的插值方法,请查看cv::resize文档。 - Micka
我已经使用了cv::resize。但如果还有其他方法,对我会很有帮助。 - Sagar Patel
使用 cv::resize,但尝试不同的插值方法。标准参数是线性插值。请查看文档,了解可以在 cv::resize 中使用哪些不同的插值方法。 - Micka
1个回答

5

正如评论中所建议的那样,没有办法增加图像的大小并在像素之间生成新信息。所有调整大小的方法都涉及一些原始信息之间的插值。

如果您查看OpenCV文档中的resize函数,您将看到以下选项:

  • INTER_NEAREST-最近邻插值
  • INTER_LINEAR-双线性插值(默认使用)
  • INTER_AREA-使用像素区域关系进行重采样。这可能是图像降采样的首选方法,因为它可以提供无莫尔纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。
  • INTER_CUBIC-在4x4像素邻域上进行双三次插值
  • INTER_LANCZOS4-在8x8像素邻域上进行Lanczos插值

您可能会发现INTER_CUBIC或INTER_LANCZOS4会产生更高“质量”的图像。


2
在特殊情况下(例如纯黑和纯白图像),inter_nearest可能是最佳选择,因为它不会向图像中引入新的颜色(例如灰度级)。但是对象边界看起来可能更像像素块。 - Micka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接