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