浅谈Python 命令行参数argparse写入图片路径操作
作者:IG.xiaoyu 发布时间:2023-03-18 21:08:11
什么是命令行参数?
命令行参数是在运行时给予程序/脚本的标志。它们包含我们程序的附加信息,以便它可以执行。
并非所有程序都有命令行参数,因为并非所有程序都需要它们。
为什么我们使用命令行参数?
如上所述,命令行参数在运行时为程序提供附加信息。
这允许我们在不改变代码的情况下动态地为我们的程序提供不同的输入 。
您可以绘制命令行参数类似于函数参数的类比。如果你知道如何在各种编程语言中声明和调用函数,那么当你发现如何使用命令行参数时,你会立刻感到宾至如归。
鉴于这是计算机视觉和图像处理博客,您在这里看到的很多参数都是图像路径或视频路径。
那么让我们创建一个名为shape_counter .py的新文件并开始编码:
我们在第2行导入 argparse - 这是帮助我们解析和访问命令行参数的包。
然后,在第7-12行,我们解析两个命令行参数。代码在这些行上非常易读,您可以看到如何格式化参数。
我们以 -input 参数为例。
在第7行,我们将ArgumentParser 对象实例化为 ap 。
然后在第8行和第9行我们添加我们的 - input 参数。我们必须指定速记和长版本( - i 和 - input ),其中任何一个标志都可以在命令行中使用。这是必需的参数,如 required = True所示。如上所示, 帮助字符串将在终端中提供附加信息。
类似地,在第10行和第11行,我们指定了 -input 参数,这也是必需的。
从那里我们使用路径加载图像。请记住,输入图像路径包含在 args [ “input” ]中 ,因此这是cv2的参数 imread 。
简单吧?
其余的行是特定于图像处理的——
在第18-20行,我们完成了三项操作:
将图像转换 为灰度。
模糊灰度图像。
阈值模糊图像。
我们准备找到并绘制形状轮廓:
在第23-25行,我们在阈值图像中找到形状轮廓 。
从那里,我们在输入图像上绘制轮廓(第28和29行)。
然后我们在图像上组装并放置文本(第32-34行)。文本包含形状的总数。
最后,我们利用我们的 -input 图像路径参数将图像写入到磁盘中的 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
来源:https://blog.csdn.net/lixiaoyu101/article/details/84139774
猜你喜欢
- 前言 简述bs4:使用pip install beautifulsoup4将bs4包安装到当前的python解释器环境,使用fro
- 1.python爬虫浏览器伪装#导入urllib.request模块import urllib.request#设置请求头headers=(
- 曾经有许多创造性的logo设计案例,logo设计资源和logo设计指导张贴在互联网的各个角落。这些帮助会为你的logo设计创造一个功能强大的
- ASP中RegExp是什么 '名字字符检验Public Function CheckName(Str) &nbs
- PHP重启php-fpm的方法启动php-fpm:/usr/local/php/sbin/php-fpmphp 5.3.3 以后的php-f
- 对于个人站长来说,如何能使自己的网站与众不同、充满个性,一直是不懈努力的目标。除了尽量提高页面的视觉效果、互动功能以外,如果能在打开网页的同
- 如下所示:var table_name = table.render({});page_size = table_name.config.l
- Update Scanner这个Firefox附加软件也是一种很好的选择。Update Scanner可以同时跟踪多个网页,并为不同的网页设
- Access允许您在数据库表中包含附件。通过利用微软的对象链接和嵌入(OLE)技术,您可以将照片、图表、文档及其他文件存储在您的Access
- 联合结果集 新建临时工数据表 代码如下:CREATE TABLE T_TempEmployee (FIdCardNumber VARCHAR
- php的命名空间功能已经出来很久了,但是一直以来没怎么深究过,这次赶着有时间所以特意翻着手册做一个整理和总结帮助自己完善完善,原本准备一篇写
- 一、问题起源 稍大一些的网站,通常都会有好几个服务器,每个服务器运行着不同功能的模块,使用不同的二级域名,而一个整体性强的网站,用户系统是统
- MySQL的命令行提示符及其表达的意思mysql> 准备好接受新命令。 &n
- 索引是以表列为基础的数据库对象。索引中保存着表中排序的索引列,并且纪录了索引列在数据库表中的物理存储位置,实现了表中数据的逻辑排序。通过索引
- Go本地测试的思路我习惯在开发过程中及时测试自己开发的功能模块,这样能及时发现问题,节省后期功能耦合之后,debug的时间。为了统一管理要测
- 一、查询条件精确,针对有参数传入情况 二、SQL逻辑执行顺序 FROM-->JOIN-->WHERE-->GROUP--&
- 问题:每次打开pycharm打开py文件光标都是insert模式, 像下面图片那样解决方案:讲Tools里面的Vim Emulator勾选去
- Dreamweaver从出道以来,其简便易用而又功能强大的“行为”(Behavior)一直是大家所关注的热点之一。在Dreamweaver
- 1、调用字符映射表输入特殊符号在键盘上按win+R,在打开的对话框中输入“charmap”,会出现字符映射表:2、利用字符编码输入特殊符号#
- CSS Sprites技术早在2005年 CSS Zengarden 的园主 Dave Shea就在ALA发表对该技术的详细阐述。原先只在C