【问题标题】:Resizing numpy array调整numpy数组的大小
【发布时间】:2021-10-01 14:36:36
【问题描述】:

我下载了一个程序并尝试运行它。由于 Scipy Essentials 被弃用,我面临一些问题。

以前的程序包含与 scipy 相关的代码。简单的操作如下:

import scipy


scipy.misc.imread(filename)

scipy.misc.imresize(img, (299, 299, 3), interp='bilinear')

(请注意,这些行与程序中的顺序不同,我只是编写了遇到问题的步骤。上面给出的行完全被下面代码示例中给出的行替换。)

由于其中许多现在不可用。我搜索并尝试更改如下12

import matplotlib
from matplotlib import pyplot
import cv2

img = matplotlib.pyplot.imread(filename)

img = cv2.resize(img, dsize=(299, 299, 3), interpolation=cv2.INTER_LINEAR)

但是,我仍然收到以下错误

cv2.error: OpenCV(4.5.3) :-1: error: (-5:Bad argument) in function 'resize'
> Overload resolution failed:
>  - Can't parse 'dsize'. Expected sequence length 2, got 3
>  - Can't parse 'dsize'. Expected sequence length 2, got 3

似乎opencv只是调整二维图像的大小。

是否有任何简单的选项,即使用单个库来执行所需的操作而不会产生任何错误?如果没有,如何使用双线性插值调整该图像 numpy 数组的大小?

【问题讨论】:

  • cv2.resize 说:默认情况下,调整大小只会改变图像的宽度和高度。这就是为什么当你给出一个 3 元素形状时它会抱怨,而期望只有 2。imresize 的旧文档似乎也期望有 2 个值,但它可能忽略了第 3 个。 3 是channel/color 数字,不应与resize 更改。

标签: python image numpy opencv


【解决方案1】:

你能试试这个吗?

img = cv2.resize(img, dsize=(299, 299), interpolation=cv2.INTER_AREA)

确保图像的数据类型是 uint8。

如果你想改变三维,你可以试试 numpy.reshape() 函数。

img = np.random.randint(0,255,(400,400))
img = img.reshape(200,200,4)
plt.imshow(img)

你的情况

img = cv2.imread("imagepath",mode='RGB')

【讨论】:

  • 最后一维的3呢?
  • 如果你想改变三维,你可以试试 numpy.reshape。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-02-26
  • 1970-01-01
相关资源
最近更新 更多