Python中使用argparse处理命令行图片路径与形状计数

拾柒
拾柒
发布时间:2026-10-14| 2人浏览过
原创

本文介绍如何在Python中使用argparse库解析命令行参数,实现动态指定输入与输出图片路径。结合OpenCV进行灰度转换、高斯模糊及阈值处理,提取图像轮廓并统计形状数量,最终将结果写入指定路径。

命令行参数基础

命令行参数是什么?

命令行参数是程序或脚本在运行时接收的标志。它们为程序提供额外的信息,使其能够执行特定的任务。

并非所有程序都依赖命令行参数,因为许多程序并不需要这种交互方式。

为什么要使用命令行参数?

如前所述,命令行参数允许在运行时向程序传递额外信息。

这使得我们无需修改源代码,即可动态地为程序提供不同的输入数据。

可以将命令行参数类比为函数参数。如果你熟悉在各类编程语言中声明和调用函数,那么掌握命令行参数的使用将非常容易上手。

鉴于本文涉及计算机视觉和图像处理,文中演示的参数主要涉及图像或视频文件的路径。

使用argparse解析路径

接下来,我们将创建一个名为shape_counter.py的新文件并开始编写代码。

在第2行,我们导入argparse模块,这是用于解析和访问命令行参数的核心库。

随后,在第7至12行代码中,我们定义了两个命令行参数。这段代码结构清晰,展示了参数的格式化方式。

这里以-input参数为例进行说明。

在第7行,我们实例化ArgumentParser对象,并将其赋值给变量ap。

接着在第8行和第9行,我们添加-input参数。必须同时指定简写形式(-i)和长写形式(--input),用户在命令行中可使用任一标志。通过设置required=True,该参数变为必需项。此外,help字符串会在终端中提供额外的提示信息。

类似地,在第10行和第11行,我们定义了另一个必需参数,用于指定输出路径。

获取参数后,我们利用路径加载图像。请注意,输入图像的路径存储在args["input"]中,随后将其作为参数传递给cv2.imread函数。

这个过程是否简单?

图像处理与轮廓提取

其余代码行主要涉及图像处理的具体操作:

在第18至20行,我们执行了三个关键步骤:

将图像转换为灰度模式。

对灰度图像进行高斯模糊处理。

对模糊后的图像应用阈值处理。

现在,我们准备查找并绘制形状的轮廓:

在第23至25行,我们在阈值图像中提取形状轮廓。

随后,我们在原始输入图像上绘制这些轮廓(见第28和29行)。

接着,我们在图像上添加并显示文本(第32至34行)。该文本包含检测到的形状总数。

最后,我们利用之前定义的--output参数,通过cv2.imwrite函数将处理后的图像保存到磁盘(第37行)。

让我们使用两个参数执行该命令:

以下是完整代码示例。

完整代码实现


Codeblock #1: Lines 1-20# import the necessary packages
import argparse
import imutils
import cv2
 
# construct the argument parser and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
	help="path to input image")
ap.add_argument("-o", "--output", required=True,
	help="path to output image")
args = vars(ap.parse_args())
 
# load the input image from disk
image = cv2.imread(args["input"])
 
# convert the image to grayscale, blur it, and threshold it
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5,5), 0)
thresh = cv2.threshold(blurred, 60, 255, cv2.THRESH_BINARY)[1]
# extract contours from the image
cnts = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,
	cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if imutils.is_cv2() else cnts[1]
 
# loop over the contours and draw them on the input image
for c in cnts:
	cv2.drawContours(image, [c], -1, (0, 0, 255), 2)
 
# display the total number of shapes on the image
text = "I found {} total shapes".format(len(cnts))
cv2.putText(image, text, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
		(0, 0, 255), 2)
 
# write the output image to disk
cv2.imwrite(args["output"], image)
$ python shape_counter.py --input input_01.png --output output_01.png

以上就是Python中使用argparse处理命令行图片路径及形状计数的完整教程,希望能对大家有所帮助,欢迎继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。