本文介绍了为什么OpenCV cv2.resize提供的答案不同于MATLAB imresize?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我正在将MATLAB代码传输到python并尝试使用OpenCV函数 cv2.resize 缩小图像,但是我得到了与MATLAB输出不同的结果。 / p> 为了确保我的代码在调整大小之前没有做错,我在两个函数上都使用了一个小例子并比较了输出。 我首先在Python和MATLAB中创建了以下数组并对其进行了上采样: Python - NumPy和OpenCV x = cv2.resize(np.array([[1,2],[3,4]]),(4,4),interpolation = cv2.INTER_LINEAR)打印x [[1. 1.25 1.75 2.] [1.5 1.75 2.25 2.5] [2.5 2.75 3.25 3.5] [3. 3.25 3.75 4.]] MATLAB x = imresize([1,2; 3,4],[4,4],'bilinear') ans = 1.0000 1.2500 1.7500 2.0000 1.5000 1.7500 2.2500 2.500 0 2.5000 2.7500 3.2500 3.5000 3.0000 3.2500 3.7500 4.0000 然后我拿了回答并将它们调整回原来的2x2大小。 Python: cv2.resize(x,(2,2),interpolation = cv2.INTER_LINEAR) ans = [[1.375,2.125], [ 2.875,3.625]] MATLAB: imresize(x,[2,2],'bilinear') ans = 1.5625 2.1875 2.8125 3.4375 它们显然不一样,当数字越大时,答案就越不同了。 任何解释或资源都将受到赞赏。解决方案 MATLAB的 imresize 默认启用抗锯齿: >> imresize(x,[2,2],'bilinear') ans = 1.5625 2.1875 2.8125 3.4375 >> imresize(x,[2,2],'bilinear','AntiAliasing',false) ans = 1.3750 2.1250 2.8750 3.6250 过去曾试图重现仅使用 interp2 imresize 的结果。 I'm transferring a MATLAB code into python and trying to downscale an image using OpenCV function cv2.resize, But I get a different results from what MATLAB outputs.To make sure that my code is not doing anything wrong before the resize, I used a small example on both functions and compared the output.I first created the following array in both Python and MATLAB and upsampled it:Python - NumPy and OpenCV x = cv2.resize(np.array([[1.,2],[3,4]]),(4,4), interpolation=cv2.INTER_LINEAR) print x [[ 1. 1.25 1.75 2. ] [ 1.5 1.75 2.25 2.5 ] [ 2.5 2.75 3.25 3.5 ] [ 3. 3.25 3.75 4. ]]MATLAB x = imresize([1,2;3,4],[4,4],'bilinear') ans = 1.0000 1.2500 1.7500 2.0000 1.5000 1.7500 2.2500 2.5000 2.5000 2.7500 3.2500 3.5000 3.0000 3.2500 3.7500 4.0000Then I took the answers and resized them back to the original 2x2 size.Python: cv2.resize(x,(2,2), interpolation=cv2.INTER_LINEAR) ans = [[ 1.375, 2.125], [ 2.875, 3.625]]MATLAB: imresize(x,[2,2],'bilinear') ans = 1.5625 2.1875 2.8125 3.4375They are clearly not the same, and when numbers are larger, the answers are a lot more different.Any explanation or resources would be appreciated. 解决方案 MATLAB's imresize has anti-aliasing enabled by default:>> imresize(x,[2,2],'bilinear')ans = 1.5625 2.1875 2.8125 3.4375>> imresize(x,[2,2],'bilinear','AntiAliasing',false)ans = 1.3750 2.1250 2.8750 3.6250This has tripped me up in the past, while trying to reproduce the results of imresize using just interp2. 这篇关于为什么OpenCV cv2.resize提供的答案不同于MATLAB imresize?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-20 04:34