【问题标题】:OpenCV resize qualityOpenCV 调整大小质量
【发布时间】:2016-05-13 13:56:18
【问题描述】:

我正在尝试使用 OpenCV 调整一组图像的大小。分辨率正确,但图像质量下降。但是,如果我通过 Apple Preview 手动调整大小,图像质量不会受到影响。我正在使所有这些图像更小,而不是把它们炸毁。这是比较质量的两张图像。请注意自行车的锯齿状辐条和锯齿状上管:

错误的调整大小:

很好的调整大小:

这是我的代码:

cv::Mat srcimg = cv::imread(src_filepath);
cv::Mat destimg = cv::imread(lowres_path);
cv::Size img_size = srcimg.size();
int img_width = img_size.width;
int img_height = img_size.height;
double percentage = 1000.0/(img_width);
double new_height = img_height * percentage;
cv::Size new_size = cv::Size(1000.0, new_height);
cv::resize(srcimg, destimg, new_size,0,0,CV_INTER_LANCZOS4);
cv::imwrite(lowres_path, destimg);

我弄乱了插值,但这似乎对图像没有影响。

【问题讨论】:

  • 能把原图也发一下吗?
  • 根据文档,“要缩小图像,通常使用 CV_INTER_AREA 插值看起来效果最好”。你试过吗?对我来说,它看起来比使用 Lanczos 插值要好得多。
  • 是的,我试过了,但没有任何明显的效果。

标签: c++ opencv image-processing


【解决方案1】:

好吧,想通了。我将其切换回 CV_INTER_AREA 并明确设置压缩设置:

cv::resize(srcimg, destimg, new_size,0,0,CV_INTER_AREA);
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_JPEG_QUALITY);
compression_params.push_back(100);
cv::imwrite(lowres_path, destimg);

【讨论】:

  • 哦,原来是 JPEG 搞砸了?如果您不想降低质量,不妨使用像 PNG 这样的无损编解码器。
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 2021-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2010-12-10
  • 2013-02-15
相关资源
最近更新 更多