我正在尝试在 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 函数的参数,以便我可以找到正确的组合来解决我的问题。 (这是专有的,所以我无法分享图像......)在结果之间等待很长时间会适得其反。
您可以使用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]]