1

我有两个大小相同的图像。我想创建一个新的隔行扫描图像,其中奇数行属于一个图像,偶数行属于另一个图像。就像一个 3d 图像。我正在尝试使用 python、openCv 和 numpy 来做到这一点!读取这两个图像并循环我尝试将值写入奇数行和偶数行。

我不知道这是否是最好的方法。你有什么建议吗?

这里的代码:

import numpy as np
import cv2

def main():
    print 'loading images...'
    imgL= cv2.imread('sx2.jpg')
    imgR= cv2.imread('dx2.jpg')
    h, w = imgL.shape[:2]
    print h, w
    cv2.imshow(interlace(imgL, imgR, h, w))
    cv2.waitKey()
    cv2.destroyAllWindows()


def interlace(imgL, imgR, h, w):
    inter= np.empty((h, w, 3),int)
    for z in range (0,3):
        for i in range(h-1):
            for j in range(w-1):
                if j % 2 == 0:
                    inter[i][j][z]= imgL[i][j][z]
                else:
                    inter[i][j][z]= imgR[i][j][z]


    b=np.float32(inter) / 255.0
    return b


if __name__ == "__main__":
    main()
4

1 回答 1

3

这应该比您的方法快得多:

def interlace(imgL, imgR, h, w):
    inter = np.empty((h, w, 3), imgL.dtype)
    inter[:h:2, :w, :] = imgL[:h:2, :w, :]
    inter[1:h:2, :w, :] = imgL[1:h:2, :w, :]
    return inter.astype(np.float32) / 255

作为一般规则,尽量避免显式 for 循环遍历 numpy 数组,执行矢量化方法几乎总是更快。并且不要将 numpy 数组索引为a[i][j][k]a[i, j, k]而是使用它,它更快更强大。

于 2013-07-09T12:41:51.373 回答