Python opencv 用cv2.imread(sys.argv[1])读取图片

最近在学习图像处理相关内容,也在github上尝试过不少代码,刚开始不明白别人写的代码中读取图片的代码到底如何运行的,比如:

img = cv2.imread(sys.argv[1])

但自己运行(在pycharm中运行的)立马报错列表索引超出范围
在这里插入图片描述
这个问题困扰了我很久,查了很多资料也看不懂(还是自己太菜了),以至于后来只要看到有sys.argv[ ]的代码直接劝退。。。但最近又卡在这个问题上,不跨过这个坎不行了,下定决心好好研究一下,以下是我学习过程中对于sys.argv[ ]的理解。
所以sys.argv[0]sys.argv[1]之类的到底如何理解?首先了解一下不同参数下基本的含义:
argv[0]:程序运行的全路径名
argv[1]:指向执行程序名后的第一个字符串
argv[2]:指向执行程序名后的第二个字符串
argv[n]:指向执行程序名后的第n个字符串
说这么些其实也不太好理解,先看一看网上举的比较多的例子,我在test.py中输入了如下代码:

import sys

a = sys.argv[0]
b = sys.argv[1]
c = sys.argv[2]

print(a)  # 输出sys.argv[0](程序名)
print(b)  # 输出sys.argv[1]
print(c)  # 输出sys.argv[2]

第一步:快捷键win+R并输入cmd打开命令提示符,进入test.py所在文件夹路径(比如:我的test.py位于argv_test文件夹中,输入D:回车,再输入cd Pywzy\About Image recognition\argv_test回车),如下图所示:
Python opencv 用cv2.imread(sys.argv[1])读取图片_第1张图片
第二步:输入python test.py回车,运行该程序,出现如下报错:
在这里插入图片描述
和之前运行别人程序时的报错相同,然后重新输入python test.py回车,运行结果如下图:
在这里插入图片描述
到这里我似乎明白了什么。。。之前的报错是因为没有给程序输入参数,导致除了sys.argv[0]以外sys.argv[1]等元素实际上不存在,因此会报错列表索引超出范围


注:以上是我对Python sys.argv[ ]用法大致的学习过程,接下来我将尝试用该方法读取图片


第一步:我重新建了一个test_argv.py,并在其中输入如下代码:

import sys
import cv2 as cv2

a = sys.argv[0]  # 程序名
print(a)
img = cv2.imread(sys.argv[1])  # 读取图片(sys.argv[1]为所要读取的图片名:img1.jpg)
cv2.imshow("img", img)  # 输出并显示图片
cv2.waitKey(0)

第二步(至关重要的一步):将test_argv.py与要处理的图片放在同一文件夹下,如下图所示:
Python opencv 用cv2.imread(sys.argv[1])读取图片_第2张图片
第三步:在命令提示符中进入该文件夹路径后,输入python test_argv.py img1.jpg并回车,img1.jpg为所要处理的图片,结果如下图所示:
Python opencv 用cv2.imread(sys.argv[1])读取图片_第3张图片
终于(菜鸟激动万分)!!!!!! 修改程序再试试读取两张图片

import sys
import cv2 as cv2

a = sys.argv[0]  # 程序名
print(a)
img_1 = cv2.imread(sys.argv[1])  # 读取图片(sys.argv[1]为所要读取的图片名:img1.jpg)
img_2 = cv2.imread(sys.argv[2])  # 读取图片(sys.argv[2]为所要读取的图片名:img2.jpg)
cv2.imshow("img_1", img_1)  # 输出并显示第一张图片
cv2.imshow("img_2", img_2)  # 输出并显示第二张图片
cv2.waitKey(0)

在命令提示符中输入python test_argv.py img1.jpg img2.jpg并回车,运行结果如下:
Python opencv 用cv2.imread(sys.argv[1])读取图片_第4张图片
个人理解:在python test_argv.py img1.jpg img2.jpg这段代码中,python test_argv.py运行程序,img1.jpg作为第一个字符串赋给sys.argv[1]img2.jpg作为第二个字符串赋给sys.argv[2],因此运行程序后img_1 = cv2.imread(sys.argv[1])img_2 = cv2.imread(sys.argv[2])才能够读取图片。
以上是一位图像处理小白用cv2.imread(sys.argv[1])读取图片的一些学习心得,第一次写CSDN,还望大佬勿喷,有不对的地方欢迎大家的指点。

你可能感兴趣的:(python,opencv,python,opencv)