OpenCV大小调整的质量

3
我正在尝试使用OpenCV调整一组图像的大小。分辨率是正确的,但图像质量下降了。然而,如果我通过苹果预览手动调整大小,则不会影响图像质量。我正在缩小所有这些图像,而不是放大它们。以下是两张比较质量的图片。请注意自行车的锯齿形辐条和锯齿形上管:

不好的调整大小:

Bad OpenCV resize

好的调整大小:

Good Apple Preview resize

以下是我的代码:

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);

我已经尝试过插值,但似乎对图像没有影响。


1
你能否也发布原始图片? - Dan Mašek
@DanMašek:http://i.imgur.com/HYGvpSY.jpg - pnus
根据文档,“缩小图像时,使用CV_INTER_AREA插值通常会得到最佳效果”。你试过了吗?对我来说,它比Lanczos插值看起来好多了。 - Dan Mašek
是的,我尝试过那个,但它没有任何显著的影响。 - pnus
1个回答

3

好的,我已经理清楚了。我将其切换回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);

1
哦,所以是JPEG搞砸了事情?如果你想没有质量损失的话,最好使用无损编解码器,如PNG。 - Dan Mašek

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