Python 很难运行该程序

Python 很难运行该程序,python,numpy,Python,Numpy,我正在尝试运行下面的程序,但遇到了此错误 回溯(最近一次呼叫最后一次): 文件“C:\Users\danil\Desktop\HK1.py”,第76行,在 img1c=cv2.imread(sys.argv[1]) 索引器:列表索引超出范围 我使用的代码如下所述: 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

我正在尝试运行下面的程序,但遇到了此错误

回溯(最近一次呼叫最后一次):

文件“C:\Users\danil\Desktop\HK1.py”,第76行,在
img1c=cv2.imread(sys.argv[1])
索引器:列表索引超出范围
我使用的代码如下所述:

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)
导入cv2
导入系统
将numpy作为np导入
def像素(img,i,j):
如果i>=0,则i=i,否则为0
如果j>=0,则j=j,否则为0
如果i
需要更改为类似的内容

if __name__ == '__main__'
    if sys.argv[2:]:
        arg1 = sys.argv[1]
        arg2 = sys.argv[2]
    else:
        print('need at least 2 arguments')
        sys.exit(2)
    img1c = cv2.imread(arg1)
    img2c = cv2.imread(arg2)
    ...

然后需要使用2个文件名(除了script.py之外)调用它。

是否为程序提供了参数?你是如何运行这个程序的
sys.argv[1]
表示它像一个参数。
索引器:列表索引超出范围
会准确地告诉您出了什么问题,您提供了一个索引,但它不是一个有效的索引。但我不需要携带第一个图像吗?然后对代码进行转换,你是说“创建一个图像”?
if __name__ == '__main__':
 img1c = cv2.imread(sys.argv[1])
 img2c = cv2.imread(sys.argv[2])
if __name__ == '__main__'
    if sys.argv[2:]:
        arg1 = sys.argv[1]
        arg2 = sys.argv[2]
    else:
        print('need at least 2 arguments')
        sys.exit(2)
    img1c = cv2.imread(arg1)
    img2c = cv2.imread(arg2)
    ...