使用argparse,得到KeyError


import argparse
import imutils
import cv2 as cv
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input image", required=True, help='Input the Image')
ap.add_argument("-o", "--output image", required=True, help='Output the Image')
args = vars(ap.parse_args())
img = cv.imread(args["input"])
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
gaussian = cv.GaussianBlur(gray, (5, 5), 0)
threshold = cv.threshold(gaussian, 60, 255, cv.THRESH_BINARY)[1]
contr = cv.findContours(threshold.copy(), cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
contr = imutils.grab_contours(contr)
for c in contr:
cv.drawContours(img, [c], -1, (0, 0, 255), 2)
txt = 'Yes I Found {} the Shapes in Image'.format(len(contr))
textPut = cv.putText(img, txt, (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
cv.imshow(args["output"], img)

让我们将代码简化为MWVE:

#test.py
import argparse
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input image", required=True, help='Input the Image')
ap.add_argument("-o", "--output image", required=True, help='Output the Image')
args = vars(ap.parse_args())
print(args)

运行
python test.py -i input.jpg -o output.jpg

{'input image': 'input.jpg', 'output image': 'output.jpg'}

问题是你滥用了第二个参数,它不是flag+描述,而只是标志,然后用作键。你应该这样做:

ap.add_argument("-i", "--input", required=True, help='Input the Image')
ap.add_argument("-o", "--output", required=True, help='Output the Image')

在上面的代码中替换它并使用python test.py -i input.jpg -o output.jpg运行现在得到:

{'input': 'input.jpg', 'output': 'output.jpg'}

您也可以显式设置args中使用的字段名,例如:

ap.add_argument("-i", "--input", required=True, help='Input the Image', dest="in")
ap.add_argument("-o", "--output", required=True, help='Output the Image', dest="out")

将得到

{'in': 'input.jpg', 'out': 'output.jpg'}

相关内容

  • 没有找到相关文章

最新更新