【发布时间】:2018-01-29 16:09:19
【问题描述】:
我目前正在使用 python 调整 PIL 图像的大小
resized_image = pil_image.resize((128, 128), resample=Image.BILINEAR)
我想使用 C++ 调整相同图像的大小,并让输出与 python 版本相同。我试过使用这样的opencvs resize函数
cv::GpuMat::src;
cv::GpuMat::dst;
cv::cuda::resize(src, dst, cv::Size(128, 128), NULL, NULL, cv::INTER_LINEAR);
但是,如果我将两个图像都写入文件并检查它们,我会发现调整大小图像的 python 版本明显更加模糊。
我正在寻找在 C++ 中忠实再现调整大小的 python 图像的方法,但我不确定最好的方法是什么。首先,我真的不明白为什么输出会有差异,他们使用相同的双线性下采样。
我尝试检查https://github.com/python-pillow/Pillow/blob/master/PIL/Image.py 中的代码,看看它是否在调用c-lib。但老实说,我什至不明白 resize 方法是如何工作的。看起来它只是在最后调用自己而没有做任何调整大小的工作。
【问题讨论】:
-
这很麻烦,而且有点宽泛。例如,如果您从 jpg 获取输入,即使解码器 可以 输出不同的图像。然后调整大小可能需要的不仅仅是某种方法(例如边界处理,尽管您的描述听起来不是这里的罪魁祸首)而且我忽略了潜在的 GPU 差异(浮点大小和 co)。为什么不将 opencv 也用于 python 部分(并希望它使用相同的核心)?或者可能是最不麻烦的方法(取决于您的任务):将其全部外包给 imagemagick。
-
@Locus Python 代码将调用委托给C implementation。
标签: python c++ opencv python-imaging-library