python学习:opencv学习和numpy学习(持续更新)

目录

cv.imread() 读取图像

cv.imshow() 在窗口中显示图像

cv.imwrite() 保存图像

cv.waitKey() 等待任何键盘事件

release() 释放或关闭图像或视频捕获对象

cv.destroyAllWindows() 销毁所有窗口 

cv.destroyAllWindow() 销毁某个窗口

cv.VideoCapture()  打开视频流

isOpened() 判断是否成功打开视频流

cv.VideoWriter_fourcc() 指定视频编解码器

cv.VideoWriter()  保存视频

cv.flip() 翻转图像


本文参考链接,所有版本的opencv库讲解都有OpenCV: OpenCV-Python 教程

cv.imread() 读取图像

#图像应位于工作目录中,或者应提供图像的完整路径
#第一个参数是图片名称或者路径
#第二个参数是图片的读取方式#cv.IMREAD_COLOR :加载彩色图像。图像的任何透明度都将被忽略。它是默认标志。(1)#cv.IMREAD_GRAYSCALE:以灰度模式加载图像(0)#cv.IMREAD_UNCHANGED : 加载图像,包括 alpha 通道(-1)
#注意:即使图像路径错误,它也不会抛出任何错误,但会给您print imgNone# 加载灰度彩色图像
img = cv.imread('messi5.jpg',0)

cv.imshow() 在窗口中显示图像

#窗口会自动适应图像大小
#第一个参数是一个窗口名称,它是一个字符串。第二个论点是我们的形象。您可以根据需要创建任意数量的窗口,但使用不同的窗口名称。cv.imshow('图像',img)

cv.imwrite() 保存图像

#第一个参数是文件名
#第二个参数是要保存的图像#将图像以 PNG 格式保存在工作目录中
cv.imwrite('messigray.png',img)

cv.waitKey() 等待任何键盘事件

#是一个键盘绑定函数
#以毫秒为单位的时间
#该函数等待任何键盘事件的指定毫秒。如果在这段时间内按任意键,程序将继续。如果传递 0,它将无限期地等待击键。它还可以设置为检测特定的击键k = cv.waitKey(0)# 获取按下了什么键
if k == 27: # 等待 ESC 键退出elif k == ord('s'): # 等待 's' 键保存并退出等待x毫秒进行下一步
cv.waitKey(x)

release() 释放或关闭图像或视频捕获对象

#如果你使用cv2.VideoCapture()打开一个视频文件,读取其中的帧,并在完成后关闭它,那么你可以使用cap.release()来释放该对象并关闭视频文件。cap = cv.VideoCapture(0)
cap.release()

cv.destroyAllWindows() 销毁所有窗口 

#销毁我们创建的所有窗口
cv.destroyAllWindows()

cv.destroyAllWindow() 销毁某个窗口

#销毁具有给定名称的窗口
cv.destroyWindow(窗口名字)

cv.VideoCapture()  打开视频流

#若要捕获视频,需要创建 VideoCapture 对象
#其参数可以是设备索引,也可以是视频文件的名称
#设备索引只是指定哪个相机的数字。通常会连接一个摄像头(就像我的情况一样)。所以我只是传递 0(或 1)。您可以通过传递 1 来选择第二个相机,依此类推#获取vtest.avi文件视频流
cap = cv.VideoCapture('vtest.avi')#获取摄像头视频流
cap = cv.VideoCapture(0)#获取url里的视频流
cap = cv.VideoCapture(url)

isOpened() 判断是否成功打开视频流

#用于检查 VideoCapture 对象是否成功打开
#返回一个布尔值,如果视频成功打开,返回 True,否则返回 False。# 打开摄像头  
cap = cv2.VideoCapture(0)  # 检查是否成功打开  
if not cap.isOpened():  print("无法打开摄像头")  exit()

cv.VideoWriter_fourcc() 指定视频编解码器

#指定视频编解码器的函数
#需要四个字符来唯一地标识编解码器
#fourcc = cv.VideoWriter_fourcc(*'XVID') 这行代码就是创建了一个新的 fourcc,'X'、'V'、'I'、'D' 四个字符分别代表了 XVID 编解码器。#'X':表示使用的编解码器是否支持跨平台。如果该位置的字符是 'X',则表示编解码器是跨平台的。
#'V':表示编解码器是否支持视频压缩。如果该位置的字符是 'V',则表示编解码器支持视频压缩。
#'I':表示编解码器是否支持图像压缩。如果该位置的字符是 'I',则表示编解码器支持图像压缩。
#'D':表示编解码器的名称。在这个例子中,'D' 表示 XVID 编解码器。#通过创建 fourcc,我们可以告诉 OpenCV 使用特定的编解码器来写入视频文件。fourcc = cv.VideoWriter_fourcc(*'XVID')

cv.VideoWriter()  保存视频

#将帧写入视频文件。它需要指定输出视频文件的路径名、编解码器、帧率和每秒写入帧数。#保存步骤#捕获摄像头视频,需要创建 VideoCapture 对象
cap = cv.VideoCapture(0)#要先定义保存的路径和编解码器  
output_path = 'output.mp4'  
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 再创建 VideoWriter 对象 
#30.0:这是帧率,表示每秒要写入视频文件的帧的数量。在这个例子中,帧率为30.0,意味着每秒将写入30帧。
#(640, 480):这是一个元组,表示视频的分辨率。在这个例子中,分辨率为640x480,意味着视频的宽度为640像素,高度为480像素。
out = cv2.VideoWriter(output_path, fourcc, 30.0, (640, 480)) #读取想保存的视频
cap = cv2.VideoCapture('input.mp4')  
while(cap.isOpened()):  ret, frame = cap.read()  #然后判断ret是否读取成功,用out.write把frame写入if ret==True:  out.write(frame)  #最后记得释放内存
out.release()  
cap.release()  

cv.flip() 翻转图像

#两个参数#一个是需要翻转的图像#另一个是一个整数,用于指定翻转的方式。# 0 表示垂直翻转,即上下翻转 # 1(水平翻转,即左右翻转)# -1(同时进行水平和垂直翻转)frame = cv.flip(frame, 0)#垂直翻转,即上下翻转

np.zeros()  创建一个具有指定形状和数据类型的新数组(黑色图片)

#所有元素初始化为零#创建一个形状为 (3, 4) 的二维数组
arr = np.zeros((3, 4)) #一个形状为 (2, 2) 的二维数组,数据类型为 float32
arr = np.zeros((2, 2), dtype=np.float32)#一个一维数组,长度为 5
arr = np.zeros(5)  #一个形状为(512,512,3)的零填充的3通道图像数组
#这个数组将包含512x512像素的图像,每个像素有三个颜色通道(红色,绿色和蓝色)。
#np.uint8指定了数组中每个元素的数据类型是无符号8位整数,范围从0到255。
#简单来说就是一张黑色图片
img = np.zeros((512,512,3), np.uint8)

cv.line() 画线

#指定图像对象、线条的起始点、结束点、线条颜色、线条宽度#将在图像 img 上从左上角到右下角绘制一条红色的线条,线条宽度为5个像素。
#img:要绘制线条的图像对象。
#(0,0):线条的起始点,即图像的左上角。
#(511,511):线条的结束点,即图像的右下角。
#(255,0,0):线条的颜色,这里是红色。在BGR颜色空间中,红色的分量为(255,0,0)。
#5:线条的宽度,这里是5个像素。
img = np.zeros((512,512,3), np.uint8)
cv.line(img,(0,0),(511,511),(255,0,0),5)

cv.circle()   画矩阵

#指定图像对象、矩形的左上角点、右下角点、矩形颜色、矩形线条宽度等参数。#在图像 img 上绘制一个左上角点为 (384,0)、右下角点为 (510,128) 的矩形,矩形的颜色为绿色,线条宽度为3个像素。最终呈现出的将是一个绿色的矩形框
mg:要绘制矩形的图像对象。
(384,0):矩形的左上角点坐标。
(510,128):矩形的右下角点坐标。
(0,255,0):矩形的颜色,这里是绿色。在BGR颜色空间中,绿色的分量为(0,255,0)。
3:矩形线条的宽度,这里是3个像素。cv.rectangle(img,(384,0),(510,128),(0,255,0),3)

cv.rectangle()  画圆形

指定图像对象、圆心坐标、半径、圆形颜色和线条宽度等参数。在图像 img 上绘制一个圆心为 (447,63)、半径为63、颜色为红色的圆形,并填充整个圆形。
img:要绘制圆形的图像对象。
(447,63):圆心的坐标。
63:半径。
(0,0,255):圆形的颜色,这里是红色。在BGR颜色空间中,红色的分量为(0,0,255)。
-1:线条宽度,这里是-1,表示填充整个圆形。cv.circle(img,(447,63), 63, (0,0,255), -1)

cv.ellipse() 画椭圆

#绘制一个椭圆形的函数
#函数原型   
#cv.ellipse(img, center, axes, angle, startAngle, endAngle, thickness, color[, lineType, shift])img:图像
center:中心点坐标
axes:轴的长度
angle:旋转角度
startAngle:起始角度
endAngle:结束角度
thickness:线条的粗细
color:线条颜色,BGR格式
lineType:线条类型,例如8、4、CV_AA等
shift:点坐标中的小数位数#在图像 img 上绘制一个中心点为 (256,256)、轴的长度为(100,50)、旋转角度为0、起始角度为0、结束角度为180、线条粗细为最大值255、线条类型为默认类型的椭圆形,填充整个椭圆。
img:要绘制椭圆形的图像对象。
(256,256):椭圆的中心点坐标。
(100,50):椭圆的轴的长度。
0:旋转角度。
0:起始角度。
180:结束角度。
255:线条的粗细,这里是最大值,表示最粗的线条。
-1:线条类型,这里是-1,表示默认线条类型。cv.ellipse(img,(256,256),(100,50),0,0,180,255,-1)

cv.polylines() 绘制折线(多边形)

#指定图像对象、折线的顶点坐标、是否闭合、折线颜色、线条宽度等参数。在图像 img 上绘制一个由顶点坐标数组 pts 定义的黄色闭合折线
将 pts 数组的形状改变为 (-1,1,2) 是为了让每个顶点坐标成为一个单独的子数组,符合 cv.polylines() 函数的要求。如果不进行这个变形操作,将会出现错误。img:要绘制折线的图像对象。
pts:包含多个顶点坐标的NumPy数组,每个顶点坐标是一个二元组,表示x和y坐标。这里通过reshape((-1,1,2))将原始数组变形为符合要求的形状。
True:表示折线是闭合的,即最后一个顶点和第一个顶点相连。
(0,255,255):折线的颜色,这里是黄色。在BGR颜色空间中,黄色的分量为(0,255,255)。pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32)
pts = pts.reshape((-1,1,2))
cv.polylines(img,[pts],True,(0,255,255))如果第三个参数为 False,您将得到连接所有点的折线,而不是闭合形状。

cv.putText() 加文字

#在图像上添加文字#定义字体类型
font = cv.FONT_HERSHEY_SIMPLEX#在图像上添加文字
img:你想要添加文字的图像。
'OpenCV':你想要添加的文字。
(10,500):文字开始的坐标,以左上角为原点,x坐标为10,y坐标为500。
font:之前定义的字体。
4:字体大小。
(255,255,255):文字颜色,这里是白色。
2:线条宽度,如果为负数,则函数会自动设置为0。
cv.LINE_AA:线条类型。cv.LINE_AA代表抗锯齿线条类型。cv.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv.LINE_AA)

cv.setMouseCallback() 设置鼠标回调函数

#鼠标回调函数是一个当你点击图像时调用的函数。这个函数可以让你在图像上实现交互,例如选择特定的像素或区域,或者实现图像标注等功能。#cv2.setMouseCallback(window_name, callback_function)
window_name 是你想要添加鼠标回调的窗口的名称。
callback_function 是你想要在鼠标点击时调用的函数。这个函数应该接受三个参数:x坐标,y坐标,和鼠标事件类型。def mouse_event(event, x, y, flags, param): 
event: 这是触发鼠标事件的类型。它可以是以下几种类型之一:
cv2.EVENT_MOUSEMOVE: 鼠标移动
cv2.EVENT_LBUTTONDOWN: 鼠标左键按下
cv2.EVENT_RBUTTONDOWN: 鼠标右键按下
cv2.EVENT_MBUTTONDOWN: 鼠标中键按下
cv2.EVENT_LBUTTONUP: 鼠标左键释放
cv2.EVENT_RBUTTONUP: 鼠标右键释放
cv2.EVENT_MBUTTONUP: 鼠标中键释放
cv2.EVENT_LBUTTONDBLCLK: 鼠标左键双击
cv2.EVENT_RBUTTONDBLCLK: 鼠标右键双击
cv2.EVENT_MBUTTONDBLCLK: 鼠标中键双击
cv2.EVENT_FLAGS: 用于检查是否有特殊修饰键(如Ctrl,Shift等)被按下。
x 和 y: 这两个参数表示鼠标事件发生的坐标。例如,如果你点击了图像的某个位置,x 和 y 就会是那个位置的坐标。
flags: 这个参数是一个可选参数,通常用于检查在鼠标事件发生时是否有任何特殊的修饰键(如Ctrl,Shift等)被按下。它可以是以下的一些值:
cv2.EVENT_FLAG_LBUTTON: 左键被按下或释放。
cv2.EVENT_FLAG_RBUTTON: 右键被按下或释放。
cv2.EVENT_FLAG_MBUTTON: 中键被按下或释放。
cv2.EVENT_FLAG_CTRLKEY: Ctrl键被按下。
cv2.EVENT_FLAG_SHIFTKEY: Shift键被按下。
cv2.EVENT_FLAG_ALTKEY: Alt键被按下。
param: 这个参数是一个可选参数,用户可以通过它将额外的数据传递给回调函数。例如,你可以将一个图像或一个窗口的引用传递给这个参数,然后在回调函数中使用它。在大多数情况下,你可能不需要这个参数,可以忽略它。#点击窗口,然后打印坐标
def mouse_event(event, x, y, flags, param):  if event == cv2.EVENT_LBUTTONDOWN:  print(f'You clicked at {x},{y}')  cv2.setMouseCallback('image_window', mouse_event)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目中添加刷新的按钮

刷新功能 点击导航的刷新按钮,刷新下方主体内容,我这边的项目分为左-上-下结构,上边为tabbar组件,下边为main组件,点击刷新整个流程是刷新按钮,去访问它父组件tabbar的兄弟组件main,使main组件…

从零开始学习 JS APL(七):实例解析关于京东案例头部案例和放大镜效果!!

大家好关于JS APl 知识点已经全部总结了,第七部部分全部都是案例部分呢!!(素材的可以去百度网盘去下载!!!) 目录 前言 一、个人实战文档 放大镜效果 思路分析: 关于其它…

LeetCode算法题解(动态规划)|LeetCode583. 两个字符串的删除操作、LeetCode72. 编辑距离

一、LeetCode583. 两个字符串的删除操作 题目链接:583. 两个字符串的删除操作 题目描述: 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: …

固态硬盘的优势是什么?

固态硬盘的优势是什么? 1、重量轻体积小。固态硬盘相比机械硬盘在体积上更小,重量更轻。一般来说,台式机的机械硬盘的尺寸在3.5英寸,而SATA接口的固态硬盘的尺寸仅有2.5英寸,而M.2接口的固态硬盘体积更小,只…

听力长难句

[ 01 ] Usually, when we think of DNA, we think of the DNA Thats in cells nucleus, but in fact a cell mitochondrion also contains DNA. In this particular situation, mitochondrial DNA analysis made more sense than nuclear DNA analysis. 翻译: 通…

新手管理者有哪些需要学习的内容?

作为新手管理者,需要学习的内容非常多。以下是一些重要的学习内容: 1. 领导力和管理技能:作为管理者,首先要学习如何有效地领导和管理团队。这包括学习如何激励员工、制定目标和计划、分配任务、解决冲突等。管理者需要具备良好的…

解决Ubuntu使用supervisor管控的程序不能使用麦克风的问题

项目场景: Ubuntu服务器有时候可能更多的是用来跑服务,但是如果用来调取麦克风又担心自己的程序崩溃掉,你可能自然想到使用supervisor来管控自己的程序,但是似乎并不是那么好用。 问题描述 Ubuntu正常使用机器的能力是没有问题的…

【医疗设备方案】脉搏式血氧仪方案

脉搏式血氧仪的主要测量数据分别是血氧饱和度、脉率、血流灌注指数。其中血氧饱和度是指在全部血容量中被结合氧气容量占全部可结合的氧气容量的百分比,是临床医疗上重要的基础数据之一。 脉搏式血氧仪测量原理 典型的脉搏式血氧仪带有一颗光电二极管PD和两颗发光二…

亚马逊云科技re:Invent大会:RAG技术赋能企业AI应用的新纪元

在最新一届re:Invent大会中,亚马逊云科技的数据和人工智能副总裁Swami Sivasubramanian博士提出了一系列AI产品,其中RAG技术成为了企业构建生成式AI应用的重要选择。这种技术的实质是将向量数据库与大语言模型相结合,赋予大模型记忆的能力&am…

LangChain的函数,工具和代理(五):Tools Routing

关于langchain的函数、工具、代理系列的博客我之前已经写了四篇,还没有看过的朋友请先看一下,这样便于对后续博客内容的理解: LangChain的函数,工具和代理(一):OpenAI的函数调用 LangChain的函数,工具和代…

2023最全的Web自动化测试介绍(建议收藏)

做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…

C++模板初阶

文章目录 泛型编程函数模板格式模板调用的是同一个函数吗?模板的实现原理T不明确模板实例化的函数和普通函数 类模板类模板写法类模板用法 注意事项 泛型编程 假如我们要写一个两数交换的函数,按我们之前学的知识,我们会这样。 void Swap(i…

TypeScript 在前端开发中的应用范围有哪些?

引言 TypeScript是一种由Microsoft开发的开源编程语言,它是JavaScript的超集,添加了静态类型和其他一些面向对象的特性。在前端开发中,TypeScript的应用范围非常广泛,它不仅提供了更好的开发工具支持,还在代码质量、可…

微信小程序基础bug

1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面&#xff0c;会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…

SAP ABAP 通过右键菜单完成Tree Control 节点的增删改功能

通过右键菜单完成Tree Control 节点的增删改功能 Tree 节点的增删改是很重要的功能&#xff0c;包括&#xff1a;增加本级节点&#xff0c;增加子节点&#xff0c;修改节点&#xff0c;删 除节点。完成后效果如下&#xff1a; 选择根节点&#xff0c;单击右键&#xff0c;弹…

peertalk Usbmux 资料收集与整理

Usbmux - The iPhone Wiki Usbmux During normal operations, iTunes communicates with the iPhone using something called “usbmux” – this is a system for multiplexing several “connections” over one USB pipe. Conceptually, it provides a TCP-like system –…

高压功率放大器产品参数及优势有哪些

高压功率放大器是一种关键性能器件&#xff0c;常用于不同领域的应用&#xff0c;包括声音放大、通信系统、电力传输等。以下是关于高压功率放大器产品参数和优势的详细介绍。 一、高压功率放大器的产品参数 输入/输出电压范围&#xff1a;高压功率放大器通常能够承受较高的输入…

金融科技Q3增长密码:结构调优,质量增厚

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 金融科技上市公司三季度交出规模突破、业绩稳增的答卷&#xff0c;为四季度审慎经营、风控优化创造了空间。 从三季度业绩数据看&#xff0c;金融科技行业延续了前两个季度的增长势头&#xff0c;主要金融科技上市公司…

每日汇评:由于美国ADP就业数据疲弱,黄金的反弹可能会延续

在美元全面回落的背景下&#xff0c;金价在2020美元附近跃跃欲试。&#xff1b; 黄金价格的上涨似乎受到美债正收益率的限制&#xff1b; 黄金价格等待美国ADP就业数据获得新的提振&#xff0c;因为技术支撑仍然存在&#xff1b; 周三早盘&#xff0c;金价在2020美元附近小幅反…

处理数据时注意事项

数据安全&#xff1a; 历史数据兼容 越权访问 数据量级 操作记录