opencv库图像基础1-python
opencv库图像基础-python
基本操作

图片颜色通道
非灰度图的颜色通道是红绿蓝,在opencv中默认是BGR的顺序
argparse模块
argparse 库是 Python 标准库中用于命令行选项与参数解析的模块。它可以让人轻松编写用户友好的命令行接口,能够帮助程序员为模型定义参数。
argparse 库的主要用途包括:
- 定义命令行选项和参数
- 解析命令行输入
- 验证命令行输入
- 提供命令行帮助
argparse 库的使用方法非常简单。首先,需要创建一个 ArgumentParser 对象。然后,可以使用 add_argument() 方法来定义命令行选项和参数。add_argument() 方法的参数包括:
- name:选项或参数的名称。
- action:选项或参数的行为。
- type:选项或参数的类型。
- default:选项或参数的默认值。
- help:选项或参数的帮助信息。
例如,以下代码定义了一个命令行选项和一个参数:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--file", action="store", type=str, help="输入文件")
parser.add_argument("--n", action="store", type=int, default=10, help="重复次数")
args = parser.parse_args()
print(args.file)
print(args.n)
该代码将解析以下命令行:
python my_program.py --file input.txt --n 20
解析结果如下:
input.txt
20
argparse 库还提供了许多其他功能,可以帮助开发人员编写更友好的命令行接口。例如,argparse 库可以提供命令行帮助、验证命令行输入等功能。
以下是一些 argparse 库的使用示例:
- 定义命令行选项和参数
- 解析命令行输入
- 验证命令行输入
- 提供命令行帮助
argparse 库是一个非常强大的命令行解析模块,可以帮助开发人员编写更友好的命令行接口。
import argparse # 导入库
parser = argparse.ArgumentParser() # 获取所有参数
parser.add_argument(“-n1”, “--number one”, help=“第一个参数”, type=int) # 添加参数1
parser.add_argument(“-n2”, “--number two”, help=“第二个参数”, type=int) # 添加参数2
args = parser.parse_args() #解析所有参数
读取显示图片
1.通过anaconda
import cv2
img=cv2.imread("logo.png")
cv2.imshow(img)
cv2.waitKey(0)
cv2.destoryAllWindows()
2.通过argparse
import cv2
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("path_image",help="path to input the image")
args=parser.parser_args() #解析参数
#加载图片1
img=cv2.imread(args.path_image)
cv2.imshow("logo",img)
#加载图片2
args_list = var(parser.parse_args())
img2 = cv2.imread(args_dict["path_image"])
cv2.imshow("logo2",img2)
cv2.waitKey(0)
cv2.destoryAllWindows()
读取处理保存图片
# 1 导入库
import cv2
import argparse
# 2 获取参数
parser = argparse.ArgumentParser()
# 3 添加参数
parser.add_argument("img_input", help="read one image")
parser.add_argument("img_output", help="save the processed image")
# 4 解析参数,以字典形式保存参数和值
args = vars(parser.parse_args())
# 5 加载图片
img = cv2.imread(args["img_input"])
# 6 处理:灰度处理
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 7 保存图片
cv2.imwrite(args["img_output"], img_gray)
# 8 显示图片
cv2.imshow("Original Image", img)
cv2.imshow("Gray Image", img_gray)
# 9 等待
cv2.waitKey(0)
# 10 关闭窗口
cv2.destroyAllWindows()
读取摄像头、视频文件
读取摄像头
#filename 是视频文件的路径或摄像头的设备 ID。如果 filename 为空,则默认从摄像头 0 捕获视频。
capture = cv2.VideoCapture(filename) # 视频捕获
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 帧的宽度
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 帧的高度
fps = capture.get(cv2.CAP_PROP_FPS) # 每秒的帧数
#判断摄像头是否打开
if capture.isOpened() is False:
print("error")
# 摄像头一直读取视频直到关闭
while capture.isOpened():
# 通过摄像头,一帧一帧的捕获
ret, frame = capture.read() #ret是布尔类,frame是视频帧图像,numpy.ndarray类型
if ret is True:
# 显示捕获的帧
cv2.imshow("frame", frame)
# 将捕获的帧转化为灰度的帧
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 显示灰度的帧
cv2.imshow("gray frame", gray_frame)
# 键盘输入q,退出视频捕获
if cv2.waitKey(20) & 0xFF == ord('q'):
break
else:
break
# 释放
capture.release()
cv2.destroyAllWindows()
读取视频文件
基本上和摄像头差不多,只是少了一个循环代码while capture.isOpened():
从而循环读取ret
# 5 加载视频文件
capture = cv2.VideoCapture(args.video_path)
# 6 读取视频
ret, frame = capture.read() # ret 是否读取到了帧(图片)
while ret:
cv2.imshow("video", frame)
ret, frame = capture.read() # 继续读取帧
if cv2.waitKey(20) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows() # 关闭
保存摄像头读取到的视频
# 5 捕获摄像头
capture = cv2.VideoCapture(0)
# 6 是否打开了摄像头
if capture.isOpened() is False:
print("Camera Error !")
# 7 获取帧的属性:宽,高,以及fps
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 宽
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高
fps = capture.get(cv2.CAP_PROP_FPS)
# 8 对视频进行编码
fourcc = cv2.VideoWriter_fourcc(*"XVID")
output_gray = cv2.VideoWriter(args.video_output, fourcc, int(fps), (int(frame_width), int(frame_height)), False)
#上面函数返回VideoWriter 对象,该对象是 cv2.VideoWriter 类的实例
# 9 读取摄像头
while capture.isOpened():
ret, frame = capture.read() # 一帧一帧地读取
if ret is True:
# 10 将读取到的帧转换为灰度
gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 11 将转换后的帧写入都新的视频文件中
output_gray.write(gray_frame)
# 12 显示视频
cv2.imshow("gray", gray_frame)
# 13 等待或按q退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# 14 释放资源
capture.release()
output_gray.release()
cv2.destroyAllWindows()
fourcc = cv2.VideoWriter_fourcc(*"XVID")这个代码含义
该代码使用 OpenCV 的 cv2.VideoWriter_fourcc 函数生成一个四字符代码 (four-character code)。四字符代码是用于指定视频编码格式的一种标准。
在上述代码中,"XVID" 是四字符代码的字符串表示。cv2.VideoWriter_fourcc 函数将该字符串转换为四字符代码,并返回该代码。
四字符代码由四个字符组成,每个字符代表一个十六进制数字。例如,"XVID" 的四字符代码为 0x31564958。
在 OpenCV 中,常用的四字符代码包括:
MJPG:Motion JPEG
XVID:XviD
DIVX:DivX
H264:H.264
MPEG4:MPEG-4
在上述代码中,fourcc 变量将用于指定视频的编码方式。
opencv库图像基础1-python的更多相关文章
- python中在计算机视觉中的库及基础用法
基于python脚本语开发的数字图像处理包有很多,常见的比如PIL.Pillow.opencv.scikit-image等.PIL和pillow只提供了基础的数字图像处理,功能有限:OpenCV实际上 ...
- 使用Python+OpenCV进行图像模板匹配(Match Template)
2017年9月22日 BY 蓝鲸 LEAVE A COMMENT 本篇文章介绍使用Python和OpenCV对图像进行模板匹配和识别.模板匹配是在图像中寻找和识别模板的一种简单的方法.以下是具体的步骤 ...
- opencv读取图像python和c++版本的结果不同
问题: 在读取同一张图像时,python读取的结果和c++读取的结果差异较大,测试图像中最大误差达到16. 原因: python的opencv采用的是4.1.1,c++采用的是3.1.0,在解析JPE ...
- OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )
转自:https://www.cnblogs.com/dyufei/p/8205121.html 一. 主要函数介绍 1) 图像大小变换 cvResize () 原型: voidcvResize(co ...
- Python如何安装OpenCV库
转载:https://blog.csdn.net/weixin_35684521/article/details/81953047 OpenCV的概念可百度,在此不再赘述.https://baike. ...
- Python的Opencv库怎么装
原文章写于时间2019.4 当时鼓捣Opencv库弄了好长时间,前前后后弄了五天,找了好多帖子不知道删除重装了多少次,现在把我试出来正确的方法给大家分享一下. 1.Pycharm 我用的是win10系 ...
- python(4): regular expression正则表达式/re库/爬虫基础
python 获取网络数据也很方便 抓取 requests 第三方库适合做中小型网络爬虫的开发, 大型的爬虫需要用到 scrapy 框架 解析 BeautifulSoup 库, re 模块 (一) r ...
- python安装opencv库
1.打开anaconda prompt(安装anaconda会默认安装),键入 pip install opencv-python,如下: 2.安装过程如下所示: 3 测试是否安装成功 上述就说明安装 ...
- python的库有多少个?python有多少个模块?
这里列举了大概500个左右的库: ! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...
- 简单的调用OpenCV库的Android NDK开发 工具Android Studio
前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈 本文后续也许还会有删改, 就 ...
随机推荐
- 【K哥爬虫普法】你很会写爬虫吗?10秒抢票、10秒入狱,了解一下?
我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...
- 百度指数 Cipher-Text、百度翻译 Acs-Token 逆向分析
K 哥之前写过一篇关于百度翻译逆向的文章,也在 bilibili 上出过相应的视频,最近在 K 哥爬虫交流群中有群友提出,百度翻译新增了一个请求头参数 Acs-Token,如果不携带该参数,直接按照以 ...
- 使用rider调试lua
emmylua1.3.5及以上版本支持rider调试,但emmylua的新版本只支持rider2020及以上版本,所以如果想用rider来调试lua,就要升级rider为2020,emmylua插件从 ...
- 群联预告满血PCIe 5.0 SSD主控:飙上14.7GB/s
群联电子将在CES 2024上展示两款新的PCIe 5.0 SSD主控方案,一个定位旗舰,一个面向主流. PCIe 5.0 SSD诞生已经差不多一年了,但是受限于群联E26主控的先天不足,以及闪存技术 ...
- Qwik 1.0 发布,全栈式 Web 框架
Qwik 是一个全栈式 Web 框架,Qwik 基于 React.Angular 和 Vue 等其他 Web 框架的概念,但以 JavaScript 流等更新的方法脱颖而出,允许以高性能向用户交付复杂 ...
- Spring Cloud Config核心功能和原理解析
配置管理的前世今生 随着技术的发展,配置项管理变得越来越简单,尽管如今它只限于管理业务属性或者配置初始化参数等等,但是当年它可肩负着 Spring IOC 的光荣使命,风光无限. 想当年刚入行的时候还 ...
- (数据科学学习手札158)基于martin为在线地图快速构建精灵图服务
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,martin作为快速发展中的新 ...
- Vulkan学习苦旅05:马不停蹄地渲染(创建交换链VkSwapchainKHR)
通俗地说,渲染图像就是为图像的每个像素选择合适的颜色.例如,如果图像的分辨率为1920x1080,表示图像中有1920x1080个像素,渲染的过程,就是为每个位置的像素计算出合适的颜色.具体来说,假设 ...
- 教你用JavaScript实现进度条
案例介绍 欢迎来到我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个进度条.进度条数字自动增加,条状图片动画演示进度完成度.通过实战我们将学会函数fun ...
- windows-网页流视频下载
一.m3u8 视频在线提取工具 https://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html