如何生成原始数组的倍数?

问题描述 投票:0回答:1

我正在尝试在 Python 中放大 OpenCV 图像,使得各个像素按整数因子展开;我用它来直观地检查深层细节,并且可以看到各个像素值(在本例中使用 cv2.imShow)。

例如数组:

    [[1,2],
     [3,4]]

因子 2 意味着我会得到:

    [[1,1,2,2],
     [1,1,2,2],
     [3,3,4,4], 
     [3,3,4,4]]

我通过使用 np.zeros 生成一个 size*factor 的数组,然后迭代原始数组中的每个点并使用(例如)将其复制到目标数组来完成此操作

    for y in range(src.shape[0]):
        for x in range(src.shape[1]):
            tgt[y*f:y*f+f, x*f:x*f+f, :] = src[y,x,:]

但正如你可以想象的那样,这不是最快的方法,我希望我只是没有找到正确的东西。

OpenCV(和 PIL)没有调整大小的功能,不能通过一种或另一种方法进行插值,这本身看起来很奇怪。

我查看并尝试了 numpy Broadcast*、numpy stride_trickks、opencv 函数、PIL 函数。

只要我不需要交互性,半手动方法就可以使用,但我正在尝试快速调整几个 opencv 函数的参数,以便我可以找到正确的组合来解决我的问题。 (这是专有的,所以我无法分享图像......)在结果之间等待很长时间会适得其反。

numpy opencv python-imaging-library
1个回答
0
投票

您可以使用opencv的

cv2.resize
和最近邻作为插值方法来实现您所需要的:

import cv2 as cv
import numpy as np

src = np.array([[1,2], [3,4]])
dst = cv.resize(src, (4,4), interpolation=cv.INTER_NEAREST)
print(dst)

输出:

[[1 1 2 2]
 [1 1 2 2]
 [3 3 4 4]
 [3 3 4 4]]
© www.soinside.com 2019 - 2024. All rights reserved.