OpenCV 学习笔记

OpenCV

环境安装


pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

显示窗口

cv2.namedWindow 是 OpenCV 库中的一个函数,用于创建一个命名窗口,以便在该窗口中显示图像或进行其他图形操作。这个函数在处理图像和视频时非常有用,尤其是在开发基于图像处理的应用程序时

函数原型


cv2.namedWindow(winname, flags=None)

参数说明

winname (str): 窗口的名称。这个名称必须是唯一的,因为它是用来标识窗口的。

flags (int, 可选): 窗口的标志,用于设置窗口的行为。默认值为


cv2.WINDOW_AUTOSIZE

。常见的标志包括:

cv2.WINDOW_NORMAL: 允许调整窗口大小。

cv2.WINDOW_AUTOSIZE: 窗口大小根据图像大小自动调整,不能手动调整。。

详细解释

读取图像


image = cv2.imread('path/to/your/image.jpg')

使用 cv2.imread 函数读取图像文件。

创建窗口


cv2.namedWindow('Image Window', cv2.WINDOW_NORMAL)

使用 cv2.namedWindow 创建一个名为 "Image Window" 的窗口,并设置标志为 cv2.WINDOW_NORMAL,允许用户调整窗口大小。

显示图像


cv2.imshow('Image Window', image)

使用 cv2.imshow 在指定的窗口中显示图像。

等待用户按键


cv2.waitKey(0)

使用 cv2.waitKey 暂停程序执行,等待用户按键。参数 0 表示无限期等待,直到有按键事件发生。

返回值:是一个ASCII值,

例如:q 键 ASCII 值为 113 ESC 键是27

关闭所有窗口


cv2.destroyAllWindows()

使用 cv2.destroyAllWindows 关闭所有打开的窗口。

其他注意事项

窗口名称:窗口名称必须是唯一的,否则会覆盖已有的同名窗口。

窗口标志:选择合适的窗口标志可以提升用户体验,特别是在需要用户交互的场景中。

创建空白图像

你可以使用 np.zeros 函数创建一个全零数组,这个数组可以表示一个空白图像。数组的形状应该符合图像的尺寸和通道数(例如,对于 RGB 图像,形状应为 (height, width, 3)

函数写法


# 创建一个 500x500 像素的空白图像,3 个通道(RGB)
height, width, channels = 500, 500, 3
blank_image = np.zeros((height, width, channels), dtype=np.uint8)

保存图片

`cv2.imwrite 是 OpenCV 库中的一个函数,用于将图像保存到文件中。这个函数在图像处理和计算机视觉任务中非常常用,特别是在需要将处理后的图像结果保存到磁盘时。

函数原型


cv2.imwrite(filename, img[, params])

参数说明

filename (str): 要保存的文件路径和名称。支持的文件格式包括 .jpg, .png, .bmp, .tiff 等。

img (numpy.ndarray): 要保存的图像。通常是一个二维或三维的 NumPy 数组,表示图像的像素值。

返回值

bool: 成功保存图像返回 True,否则返回 False

其他注意事项

文件路径:确保提供的文件路径是有效的,如果路径不存在,OpenCV 会尝试创建它,但如果权限不足则会保存失败。

图像切片(裁剪)

在 OpenCV 中,图像切片用于从图像中提取一个子区域(矩形区域)。这种操作在图像处理中非常常见,特别是在进行目标检测、ROI(Region of Interest,感兴趣区域)提取等任务时。

语法解释

假设你有一个图像 img,它的类型是 numpy.ndarrayimg[y:y+h, x:x+w] 的含义如下:

x: 子区域左上角的 x 坐标。

y: 子区域左上角的 y 坐标。

w: 子区域的宽度。

h: 子区域的高度。

切片操作

img[y:y+h, x:x+w] 提取的是从 (x, y) 开始,宽度为 w,高度为 h 的矩形区域。

其他注意事项

边界检查:确保 (x, y) 和 (x+w, y+h) 都在图像的边界内,否则会导致数组索引越界错误。

数据类型img 通常是 numpy.ndarray 类型,切片操作返回的也是 numpy.ndarray 类型。

调整图片大小

cv2.resize 是 OpenCV 库中的一个函数,用于调整图像的大小。这个函数在图像处理中非常常用,特别是在需要对图像进行缩放、放大或缩小以适应不同需求时。

函数原型


cv2.resize(src, dsize, dst)

参数说明

src (numpy.ndarray): 输入图像,通常是一个二维或三维的 NumPy 数组。

dsize (tuple): 输出图像的尺寸,是一个二元组 (width, height)。如果指定了 fx 和 fy,则可以忽略此参数。

返回值

dst (numpy.ndarray): 缩放后的图像。

图像绘制

绘制圆形

cv2.circle()函数用于在图像上绘制圆形。该函数的语法如下:


cv2.circle(img, center, radius, color, thickness)

其中,参数解释如下:

img:要绘制圆形的图像。

center:圆心的坐标。

radius:圆的半径。

color:圆的颜色,通常是一个表示BGR颜色的元组,例如(255, 0, 0)表示蓝色。

thickness:圆的边界线条的厚度,如果为负值或cv2.FILLED,表示填充整个圆。

绘制矩形

cv2.rectangle()`函数用于在图像上绘制矩形。该函数的语法如下:


 cv2.rectangle(img, pt1, pt2, color[, thickness[, lineType[, shift]]])

其中,参数解释如下:

img:要绘制矩形的图像。

pt1:矩形的一个顶点。

pt2:矩形对角线上的另一个顶点。

color:矩形的颜色,通常是一个表示BGR颜色的元组,例如(255, 0, 0)表示蓝色。

thickness:矩形边框的厚度,如果为负值或cv2.FILLED,表示填充整个矩形内部。

绘制文本

cv2.putText 是 OpenCV 库中的一个函数,用于在图像上添加文本。这个函数在图像处理和计算机视觉任务中非常有用,特别是在需要标注图像、显示信息或调试时。

函数原型


cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])

参数说明

img (numpy.ndarray): 输入图像,通常是一个二维或三维的 NumPy 数组。

text (str): 要添加的文本字符串。

org (tuple): 文本的起始位置,是一个二元组 (x, y),表示文本左下角的坐标。

fontFace

(int): 字体类型,常见的字体类型包括:

cv2.FONT_HERSHEY_SIMPLEX: 正常大小的无衬线字体

cv2.FONT_HERSHEY_PLAIN: 小号的无衬线字体

cv2.FONT_HERSHEY_DUPLEX: 正常大小的无衬线字体,比 FONT_HERSHEY_SIMPLEX 更粗

cv2.FONT_HERSHEY_COMPLEX: 正常大小的有衬线字体

cv2.FONT_HERSHEY_TRIPLEX: 正常大小的有衬线字体,比 FONT_HERSHEY_COMPLEX 更粗

cv2.FONT_HERSHEY_SCRIPT_SIMPLEX: 手写风格的字体

cv2.FONT_HERSHEY_SCRIPT_COMPLEX: 手写风格的字体,比 FONT_HERSHEY_SCRIPT_SIMPLEX 更粗

cv2.FONT_ITALIC: 斜体修饰符,可以与其他字体类型组合使用

fontScale (float): 字体大小的比例因子。

color (tuple): 文本颜色,是一个三元组 (B, G, R),表示蓝色、绿色和红色的值。

thickness (int, 可选): 文本线条的厚度,默认值为 1。

lineType

(int, 可选): 线条类型,常见的线条类型包括:

cv2.LINE_4: 4 连通线

cv2.LINE_8: 8 连通线

cv2.LINE_AA: 抗锯齿线(默认值)

img (numpy.ndarray): 添加文本后的图像。

绘制直线


cv2.line(img, pt1, pt2, color, thickness lineType) -> img

参数说明

img: 输出图像,即要在这张图上绘制直线的图像。通常是一个 NumPy 数组。

pt1: 直线的一个端点,是一个包含两个元素(x, y)的元组,代表该点的坐标。

pt2: 直线的另一个端点,也是一个包含两个元素(x, y)的元组,代表该点的坐标。

color: 直线的颜色,对于 BGR 图像,这应该是一个包含三个整数的元组,分别对应蓝色、绿色和红色的强度(例如 (255, 0, 0) 表示纯蓝色)。对于灰度图像,只需要一个整数值即可。

thickness: 可选参数,定义直线的宽度。默认值是 1。

返回值

img: 返回的是经过修改后的图像,实际上就是传入的图像本身,因为 cv2.line() 是直接在原图上操作的。

cv2.line() 是 OpenCV 库中的一个函数,用于在图像上绘制直线。这个函数非常直观,它接受多个参数来定义直线的位置、颜色、厚度等属性。以下是 cv2.line() 函数的基本语法及其参数说明


import cv2

img = cv2.imread("images/car.png")

# 定义直线的起点和终点
start_point = (50, 50) # 起点坐标 (x1, y1)
end_point = (450, 450) # 终点坐标 (x2, y2)

# 定义颜色 (B, G, R) 和线条粗细
color = (255, 0, 0) # 蓝色
thickness = 2  # 线条的宽度

# 使用 cv2.line() 在图像上绘制直线
cv2.line(img, start_point, end_point, color, thickness)

# 显示图像
cv2.imshow('Image with Line', img)

# 等待按键,然后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

控制鼠标

cv2.setMouseCallback 是 OpenCV 提供的一个非常有用的函数,它允许用户定义一个回调函数,当鼠标事件发生时(如点击、释放、移动等),该回调函数会被调用。这在创建交互式应用程序时特别有用,比如图像标注工具、绘图程序等。

代码解释

draw_test函数:

event: 鼠标事件类型,如 cv2.EVENT_LBUTTONDOWN 表示左键按下。

x, y: 鼠标事件发生时的坐标。

flags: 额外的标志位,通常不用。

param: 传递给回调函数的参数,通常不用。

cv2.setMouseCallback('image', draw_test) 设置鼠标回调函数,当在 'image' 窗口中发生鼠标事件时,调用 draw_circle 函数

视频处理

cv2.VideoCapture 是 OpenCV 库中的一个类,用于从摄像头或视频文件中捕获视频帧。这个类提供了多种方法来控制视频捕获的过程,包括打开视频文件、读取视频帧、获取视频属性等。

常用方法

read()

read() 方法用于从视频源中读取下一帧。它返回一个布尔值和图像帧。布尔值表示是否成功读取了帧,图像帧是一个 NumPy 数组。


ret, frame = cap.read()
if not ret:
    print("Failed to grab frame")
    break

release()

release() 方法用于释放视频捕获资源。在完成视频处理后,必须调用此方法来释放摄像头或视频文件。


cap.release()

isOpened()

isOpened() 方法用于检查视频捕获对象是否已经成功打开。


if not cap.isOpened():
    print("Error opening video stream or file")

get() 和 set()

get() 和 set() 方法用于获取和设置视频捕获属性。常用的属性包括帧宽、帧高、帧率等。


# 获取帧宽
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)

# 获取帧高
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)

# 获取帧率
fps = cap.get(cv2.CAP_PROP_FPS)

# 设置帧宽
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)

# 设置帧高
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

关于opencv 显示中文乱码问题解决

​ 在使用 OpenCV 的 cv2.putText 函数添加中文时,可能会遇到显示乱码的问题。这是因为 OpenCV 默认使用的字体不支持中文字符。为了在图像上正确显示中文,可以使用 PIL(Pillow)库来处理文本,然后将文本渲染到图像上

1 确保你已经安装了 opencv-python 和 Pillow 库。如果没有安装,可以通过 pip 安装:

注意:如果用的Anaconda ,是包含了这个库,可以不安装

pip install opencv-python pillow

2 下载一个中文字体文件,常见的中文字体文件有 simhei.ttfsimsun.ttc 等。你可以从系统中找到这些字体文件,或者从互联网下载。

3 定义 put_text 函数

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

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

相关文章

超越 YOLOv8,MAF-YOLO利用重参化异构卷积大幅度提升多尺度信息融合能力!

由于多尺度特征融合的有效性能,路径聚合FPN(PAFPN)被广泛应用于YOLO检测器中。 然而,它不能同时高效且自适应地融合高级语义信息与低级空间信息。本文提出了一种名为MAF-YOLO的新模型,这是一个具有多功能 Neck 网络的新…

堆(堆排序,TOP K, 优先级队列)

1 概念解释 堆的定义:堆是一颗完全二叉树,分为大堆和小堆 大堆:一棵树中,任何父亲节点都大于等于孩子的节点,大堆的根结点最大 小堆:一棵树中,任何父亲节点都小于等于孩子节点,小堆…

练习LabVIEW第二十八题

学习目标: 刚学了LabVIEW,在网上找了些题,练习一下LabVIEW,有不对不好不足的地方欢迎指正! 第二十八题: 建立一个VI,模拟滚动—个骰子(骰子取值1~6),跟踪骰子滚动后的取值出现次数…

延迟队列的安装步骤

RabbitMQ 中的延迟队列(Delayed Queue)是一种特殊的队列,用于在消息被发送后延迟一段时间再投递给消费者。它在许多场景中非常有用,例如需要定时执行的任务、限流、重试机制等。 使用场景 定时任务: 例如发送提醒邮件或通知&…

六,Linux基础环境搭建(CentOS7)- 安装HBase

Linux基础环境搭建(CentOS7)- 安装HBase 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、HBase下载及安装 HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“…

在 .NET 8 Web API 中实现 Entity Framework 的 Code First 方法

本次介绍分为3篇文章: 1:.Net 8 Web API CRUD 操作.Net 8 Web API CRUD 操作-CSDN博客 2:在 .Net 8 API 中实现 Entity Framework 的 Code First 方法https://blog.csdn.net/hefeng_aspnet/article/details/143229912 3:.NET …

斐波那契时间序列,精准捕捉市场拐点 MT4免费公式源码!

指标名称:斐波那契时间序列 版本:MT4 ver. 2.01 斐波那契时间序列是一种技术分析工具,通过将斐波那契数列(如1, 2, 3, 5, 8, 13等)应用于时间轴上,用于预测市场价格的时间周期拐点。斐波那契时间序列在股…

Unsafe Fileupload-pikachu

系列目录 第一章 暴力破解 第二章 Cross-Site Scripting-pikachu 第三章 CSRF 第四章 sql-injection 第五章 RCE 第六章 File inclusion 第七章 Unsafe filedownload 第八章 Unsafe fileupload 概述 不安全的文件上传漏洞概述 文件上传功能在web应用系统很常见&#x…

嵌入式学习-网络-Day05

嵌入式学习-网络-Day05 1.网络超时检测 1.1应用场景 1.2设置超时检测 1)通过参数设置 2)setsockopt属性设置 3)定时器alarm设置 2.广播 2.1广播发送流程: 2.2广播接收流程: 3.组播 3.1组播发送流程 3.2组播接收流程 4.…

Android启动流程_SystemServer阶段

前言 上一篇文档我们描述了在 Android 启动流程中 Zygote 部分的内容,从 Zygote 的配置、启动、初始化等内容展开,描述了 Zygote 在 Android 启动中的功能逻辑。本篇文档将会继续 Android 启动流程的描述,从 SystemServer 进程的内容展开&am…

一年期免费HTTPS证书:网络安全新选择

HTTPS证书的重要性 HTTPS证书,全称为安全套接字层/传输层安全协议证书,是一种在互联网上建立安全连接的数字证书。它通过公钥加密技术,对网站和用户之间的数据传输进行加密,有效防止数据被窃取或篡改,保障用户信息的安…

(实战)WebApi第10讲:Swagger配置、RESTful与路由重载

一、Swagger配置 1、导入SwashBuckle.AspNetCore包 2、在.NET Core 5框架里的startup.cs文件里配置swagger 3、在.NET Core 6框架里的Program.cs文件里配置swagger 二、RESTful风格:路由重载,HttpGet()括号中加参数 (1)原则&…

Pr 视频效果:闪光灯

视频效果/风格化/闪光灯 Stylize/Strobe Light 闪光灯 Strobe Light效果可用于在视频中创建闪烁或频闪的效果,类似于舞台上的频闪灯或摄影中的闪光灯。 ◆ ◆ ◆ 效果选项说明 通过调整各种参数,可以自定义闪光的颜色、频率、持续时间和混合模式&#…

Spring自动装配(特别版)

今天整理了一下Spring自动装配的过程,也突出了几个比较难以解答的问题.实践来求真知. 一. 自动装配过程 先按类型查找,若只有一个则直接返回如果找到多个,则匹配名字如果名字不一致,则报错. 二. 自动装配方式 构造器注入(推荐): 因为如果有一天脱离了Spring的环境,我们去使用…

力扣之612.平面上的最近距离

文章目录 1. 612.平面上的最近距离1.1 题目说明1.2 准备数据1.3 解法1.4 结果截图 1. 612.平面上的最近距离 1.1 题目说明 Point2D 表: ----------------- | Column Name | Type | ----------------- | x | int | | y | int | ----------------- (x, y) 是该表的…

Mac下载 安装MIMIC-IV 3.0数据集

参考blog MIMIC IV 3.0数据库安装方法_mimic数据下载-CSDN博客 MIMIC IV数据库安装(二)_mimic数据库安装-CSDN博客 MIMIC-IV3.0安装_mimic iv 3.0-CSDN博客 MIMIC-IV-v2.0安装教程_mimic iv 安装教程-CSDN博客 MIMIC IV 3.0数据库安装方法或者思路&…

java项目之教师工作量管理系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的教师工作量管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 教师工作量管理系统的…

12. MapReduce全局计数器

一. 计数器概述 在执行MapReduce程序时,控制台的输出中一般会包含如下内容。 这些输出就是MapReduce的全局计数器的输出信息。计数器是用来记录job的执行进度和状态的,它的作用可以理解为日志,方便用户了解任务的执行状况,辅助…

STM32F103C8T6 IO 操作

1.开启相关时钟 在 STM32 微控制器中,开启 GPIO 端口的时钟是确保 IO 口可以正常工作的第一步。 查找 RCC 寄存器使能时钟 在 STM32 中,时钟控制的寄存器通常位于 RCC (Reset and Clock Control) 模块中。不同的 STM32 系列(如 STM32F1、STM…

使用LangChain控制大模型的输出——解析器Parser

LangChain框架中有两个好用的工具: 提示词模板(PromptTemplate)用于指定LLM的输入,解析器(Parser)来正确解释LLM给出的输出 即: 提示词模板(PromptTemplate):用于格式化地接受输入string变量,作为完整的提示词。 如 给…