如何使用python和openCv创建隔行扫描行图像

时间:2013-07-09 10:14:08

标签: image opencv python-2.7 numpy

我有两张相同尺寸的图片。我想创建一个新的隔行扫描图像,其中奇数行属于一个图像,偶数行属于另一个图像。 像一个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()

1 个答案:

答案 0 :(得分:2)

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

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

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