我試圖運行下面的程序,但遇到了這個錯誤。難以運行程序
回溯(最近通話最後一個):
File "C:\Users\danil\Desktop\HK1.py", line 76, in <module>
img1c = cv2.imread(sys.argv[1])
IndexError: list index out of range
我使用的代碼如下描述:
import cv2
import sys
import numpy as np
def Pixel(img, i, j):
i = i if i >= 0 else 0
j = j if j >= 0 else 0
i = i if i < img.shape[0] else img.shape[0] - 1
j = j if j < img.shape[1] else img.shape[1] - 1
return img[i, j]
def xDer(img1, img2):
res = np.zeros_like(img1)
for i in range(res.shape[0]):
for j in range(res.shape[1]):
sm = 0
sm += Pixel(img1, i, j + 1) - Pixel(img1, i, j)
sm += Pixel(img1, i + 1, j + 1) - Pixel(img1, i + 1, j)
sm += Pixel(img2, i, j + 1) - Pixel(img2, i, j)
sm += Pixel(img2, i + 1, j + 1) - Pixel(img2, i + 1, j)
sm /= 4.0
res[i, j] = sm
return res
def yDer(img1, img2):
res = np.zeros_like(img1)
for i in range(res.shape[0]):
for j in range(res.shape[1]):
sm = 0
sm += Pixel(img1, i + 1, j) - Pixel(img1, i, j)
sm += Pixel(img1, i + 1, j + 1) - Pixel(img1, i, j + 1)
sm += Pixel(img2, i + 1, j) - Pixel(img2, i, j)
sm += Pixel(img2, i + 1, j + 1) - Pixel(img2, i, j + 1)
sm /= 4.0
res[i, j] = sm
return res
def tDer(img, img2):
res = np.zeros_like(img)
for i in range(res.shape[0]):
for j in range(res.shape[1]):
sm = 0
for ii in range(i, i + 2):
for jj in range(j, j + 2):
sm += Pixel(img2, ii, jj) - Pixel(img, ii, jj)
sm /= 4.0
res[i, j] = sm
return res
averageKernel = np.array([[ 0.08333333, 0.16666667, 0.08333333],
[ 0.16666667, 0. , 0.16666667],
[ 0.08333333, 0.16666667, 0.08333333]], dtype=np.float32)
def average(img):
return cv2.filter2D(img.astype(np.float32), -1, averageKernel)
def translateBrute(img, u, v):
res = np.zeros_like(img)
u = np.round(u).astype(np.int)
v = np.round(v).astype(np.int)
for i in range(img.shape[0]):
for j in range(img.shape[1]):
res[i, j] = Pixel(img, i + v[i, j], j + u[i, j])
return res
def hornShunckFlow(img1, img2, alpha):
img1 = img1.astype(np.float32)
img2 = img2.astype(np.float32)
Idx = xDer(img1, img2)
Idy = yDer(img1, img2)
Idt = tDer(img1, img2)
u = np.zeros_like(img1)
v = np.zeros_like(img1)
#100 iterations enough for small example
for iteration in range(100):
u0 = np.copy(u)
v0 = np.copy(v)
uAvg = average(u0)
vAvg = average(v0)
u = uAvg - 1.0/(alpha**2 + Idx**2 + Idy**2) * Idx * (Idx * uAvg + Idy * vAvg + Idt)
v = vAvg - 1.0/(alpha**2 + Idx**2 + Idy**2) * Idy * (Idx * uAvg + Idy * vAvg + Idt)
return u, v
if __name__ == '__main__':
img1c = cv2.imread(sys.argv[1])
img2c = cv2.imread(sys.argv[2])
img1g = cv2.cvtColor(img1c, cv2.COLOR_BGR2GRAY)
img2g = cv2.cvtColor(img2c, cv2.COLOR_BGR2GRAY)
u, v = hornShunckFlow(img1g, img2g, 0.1)
imgRes = translateBrute(img2g, u, v)
cv2.imwrite('Movimento.jpg', imgRes)
print img1g
print translateBrute(img2g, u, v)
你提供了一個參數給你的程序?你如何運行該程序? 'sys.argv [1]'表示它喜歡爭論。 – Evert
'IndexError:list index out of range'告訴你**完全**錯在什麼地方,你有一些你正在提供索引並且它不是一個有效的索引。 –