Python 为什么OpenCV Resize在指定Dsize与fx/fy时会给出不同的像素值?

Python 为什么OpenCV Resize在指定Dsize与fx/fy时会给出不同的像素值?,python,opencv,opencv-python,Python,Opencv,Opencv Python,今天,我惊讶地发现,当使用OpenCV Pythoncv2.resize时,我得到的结果与我指定fx和fy时不同,或者我自己进行dsize计算并输入时也不同 请注意,这与图像大小不匹配无关,而是实际的单个像素值差异 import cv2 import numpy as np scale = 0.55 image = np.arange(100).reshape(10, 10).astype(np.float) resized_fx_fy = cv2.resize(image, None, fx

今天,我惊讶地发现,当使用OpenCV Python
cv2.resize
时,我得到的结果与我指定
fx
fy
时不同,或者我自己进行
dsize
计算并输入时也不同

请注意,这与图像大小不匹配无关,而是实际的单个像素值差异

import cv2
import numpy as np

scale = 0.55
image = np.arange(100).reshape(10, 10).astype(np.float)
resized_fx_fy = cv2.resize(image, None, fx=scale, fy=scale, interpolation=cv2.INTER_LINEAR)
resize_height, resize_width = resized_fx_fy.shape
resized_dsize = cv2.resize(image, (resize_width, resize_height), interpolation=cv2.INTER_LINEAR)
print(np.abs(resized_fx_fy - resized_dsize).max())
从opencv文档的简单解释来看,它们应该是等价的,但显然不是

一个可能的提示:当
scale=0.5

如果相关:

Python 3.8.5

opencv-contrib-python     4.2.0.34                 pypi_0    pypi
opencv-python             4.2.0.34                 pypi_0    pypi
opencv-python-headless    4.5.1.48                 pypi_0    pypi

cv::resize
是一种仿射变换,它将目标图像中的整数索引映射到源图像中的浮点索引,并使用插值方法计算值。因为它是仿射变换,所以比例参数是确定精确输出值的最重要参数


根据OpenCV,如果提供了代码< >代码大小>代码>代码> <代码> Fy < /code >(称为代码> VixSuxeEX x/code >和<代码> In SuffSeaCyEy < /Code > C++中的代码,用输出的相对比例覆盖,不管代码< FX <代码>还是<代码> Fy < /code >为零。在您的示例中,第一个

cv.resize()
使用0.55的
inv\u scale\u x
inv\u scale\u y
。第二个
cv.resize()
对这两个比例参数使用0.6。

对于0.6、0.7的比例也可以。。。刻度与输入/输出比率完全匹配的任何东西(不舍入)。我没有检查代码,但我想说,当您指定目标大小时,它首先计算
fx
fy
,然后使用这些值进行实际调整大小。在这种情况下,您将0.55的比例与0.6的比例进行比较,这两个比例都采样到6x6阵列中。RGB图像的情况如何?我知道你的例子是浮点值。我想知道它的整数可能不同。这可以解释为什么0.5生成相同的图像,因为输出将是5x5并且
5/10==0.5
print(resized_fx_fy - resized_dsize)
[[0.83333344 0.98484851 1.13636362 1.28787897 1.43939408 1.09090917]
 [2.34848631 2.50000024 2.65151525 2.80303049 2.9545455  2.6060605 ]
 [3.86363742 4.01515031 4.16666532 4.31818056 4.46969557 4.12121058]
 [5.37879091 5.53030276 5.68181777 5.83333302 5.98484802 5.63636303]
 [6.89394202 7.04545283 7.19696784 7.34848309 7.49999809 7.1515131 ]
 [3.40909298 3.5606029  3.71211791 3.86363316 4.01514816 3.66666317]]
Python 3.8.5

opencv-contrib-python     4.2.0.34                 pypi_0    pypi
opencv-python             4.2.0.34                 pypi_0    pypi
opencv-python-headless    4.5.1.48                 pypi_0    pypi