人工智能基础 opencv

ops/2024/11/2 18:50:14/

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它提供了丰富的图像处理和计算机视觉算法,广泛应用于各种领域,如图像处理、视频分析、对象检测、人脸识别、机器学习等。

环境安装:

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

在已有虚拟环境的情况下,打开命令符输入

进入你指定要安装的目录下,输入上面的下载命令。

1.显示窗口

在进行图片操作时,如果导入图片文件,切记不要把.py文件放在图片文件下。

cv2.namedWindow是 OpenCV 库中的一个函数,用于创建一个命名窗口,以便在该窗口中显示图像或进行其他图形操作。

格式:

cv2.namedWindow(winname, flags=None)

参数:

winname:通常是字符串类型,用于表示窗口的名称

flags:窗口的标志,用于设置窗口的行为。默认为cv2.WINDOW_AUTOSIZE。即允许调整窗口大小

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

 设置窗口的大小。

一个窗口显示的基本流程:

(1)读取图片:

函数名为imread,从括号内给定路径读取图片。

(2)创建窗口

(3)显示图像

函数名为imshow;

括号内两个image,一个为窗口名,一个为要显示的图片(前面已经定义过的函数,名字可以自定)

(4)等待按键

括号内的值若为0,即无限期等待,直到有按键时间发生。里面的值为毫秒

也有特殊的值,可以指定为几个特殊的ASCII 值,例如27为Esc键,特定的ASCLL值对应键盘上的键值。

(5)关闭窗口

创建一个空白图像

创建一个黑白图像

RGB 图像可以表示为一个三维矩阵,矩阵的维度为 (height, width, 3),其中 height 是图像的高度,width 是图像的宽度,3 表示三个颜色通道。


2.保存图像

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

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

参数说明:

filename:为要保存的路径

img:为要保存的图片

3.图像切片

上图为试例。

先将x,y,w,h定义好,在用公式做裁剪;

x:坐标小于图片的宽度

y:坐标小于图片的高度

w:裁剪后的宽度

h:裁剪后的高度

cai_jian = img[y:y+h,x:w+x]#裁剪图片的标注公式

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

4.改变图片大小

`cv2.resize` 是 OpenCV 库中的一个函数,用于调整图像的大小。

调整图片大小的作用:

1.方便OCR文字识别,像素超过OCR的阈值,识别不出来,需要图片大小调整
2.模型训练师,像素的大小也会影响模型训练的复杂度

cv2.resize(src, dsize, dst)

参数:

src:为要调整的图片名

deside:为调整后的图片大小

获取原图片大小:

用shape方法获取图片的数组,通过切片获得。

5.图像绘制

5.1 绘制圆形

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

参数解释如下:

        img:要绘制圆形的图像。

        center:圆心的坐标。

        radius:圆的半径。

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

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

需要先定义。

5.2 矩形绘制

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

参数:

        `img`:要绘制矩形的图像。
        `pt1`:矩形的一个顶点。

         pt2`:矩形对角线上的另一个顶点。
         `color`:矩形的颜色,通常是一个表示BGR颜色的元组,例如`(255, 0, 0)`表示蓝色。
         `thickness`:矩形边框的厚度,如果为负值或`cv2.FILLED`,表示填充整个矩形内部。

5.3 绘制文本

cv2.putText 是 OpenCV 库中的一个函数,用于在图像上添加文本。

cv2.putText(img, text, org, fontFace, fontScale, color[, thickness[, lineType[, bottomLeftOrigin]]])
image = cv2.imread("images/car.png")# 定义文本内容和位置
text = "hello world!"
# 文本的左下角位置
position = (50, 200)
# 设置字体类型
font = cv2.FONT_HERSHEY_SIMPLEX
#字体大小
font_scale = 1
#字体颜色
font_color = (0, 255, 0)  
#字体线条的粗细
line_type = 2# 在图像上绘制文本
cv2.putText(image, text, position, font, font_scale, font_color, line_type)
# 显示图像
cv2.imshow(' Text', image)
cv2.waitKey(0)
cv2.destroyAllWindows()# 保存图像(可选)
cv2.imwrite('output_image.png', image)

参数:

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

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

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

  • fontFace

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

  • 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): 添加文本后的图像。

5.4 绘制直线

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

参数:

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

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

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

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

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

cv2.line是在原图上操作的。

6.控制鼠标

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

import cv2
#创建鼠标回调函数
def draw_test(event,x,y,flag,param):print(x,y)
img =  cv2.imread('images/car.png')
cv2.namedWindow('image')
#设置鼠标回调函数
cv2.setMouseCallback('image', draw_test)
cv2.imshow('image', img)
# 等待用户按键
cv2.waitKey(0)
cv2.destroyAllWindows()

解释:

draw_test函数:

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


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


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


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

表示鼠标按下:

event == cv2.EVENT_LBUTTONDOWN:

表示鼠标释放:

event ==cv2.EVENT_RBUTTONUP:

表示鼠标在图像上移动:

event ==cv2.EVENT_MOUSEMOVE:

循环操作,知道停止键。

while True:cv2.imshow('name',img)if cv2.waitKey(20) == 27:break

7.视频处理 

`cv2.VideoCapture` 是 OpenCV 库中的一个类,用于从摄像头或视频文件中捕获视频帧。

方法:

        read()

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

        release()

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

        isOpened()

用于检查视频捕获对象是否已经成功打开。

用于检查,返回故障,正常用不着。

        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)

cv2.VideoCapture():

标准用法:

解决中文乱码

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

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

```
pip install opencv-python pillow
```

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

3 .定义 put_text 函数

导入包:

定义函数

def put_text(image, text, position, font_path, font_size, color):# 将 OpenCV 图像转换为 PIL 图像pil_image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))# 创建一个可以在给定图像上绘图的对象draw = ImageDraw.Draw(pil_image)# 加载字体font = ImageFont.truetype(font_path, font_size)# 在图像上绘制文本draw.text(position, text, fill=color, font=font)# 将 PIL 图像转换回 OpenCV 图像image_with_text = cv2.cvtColor(np.array(pil_image), cv2.COLOR_RGB2BGR)return image_with_text


http://www.ppmy.cn/ops/130493.html

相关文章

Rust精简核心笔记:第二波,语法精髓部分解锁

前面介绍了Rust精简比较第一波 Rust精简核心笔记:第一波,深入浅出语法精华-CSDN博客 把第二波整理如下,通过三波会把全部Rust核心、实用、最简练的语法整理出来,最高效掌握Rust。 Rust精简笔记(二) Rust核心笔记第二波总结整理&am…

前端八股文第八篇

71. 请求参数如何防篡改 在前端开发中,通常需要发送请求到后端获取数据或执行操作。为了防止请求参数被篡改,可以采取以下措施: 使用 HTTPS 协议:使用 HTTPS 可以确保数据在传输过程中的加密和完整性验证,防止请求被中…

锁(Python)

简介 掩耳盗铃习惯了,今天整一点偏高级的,攻克一下我一直没拿下的自启动。 能修改自启动项,能在开机时启动,并在桌面创建(基于注册表实现)一个txt文件,向这个文件输入密码才能继续使用电脑&am…

开源办公软件 ONLYOFFICE 深入探索

文章目录 引言1. ONLYOFFICE 创建的背景1. 1 ONLYOFFICE 项目启动1. 2 ONLYOFFICE 的发展历程 2. 核心功能介绍2. 1 桌面编辑器2. 1. 1 文档2. 1. 2 表格2. 1. 3 幻灯片 2. 2 协作空间2. 3 文档编辑器 - 本地部署版 3. 技术介绍4. 安装5. 优势与挑战6. 个人体验7. 强大但不止于…

centos7 zabbix监控nginx的pv和uv和status_code

zabbix监控nginx的pv: pv)cat /var/log/nginx/access.log|awk {print $1}|wc -l;;zabbix-get验证: [rootbogon ~]# zabbix_get -s 192.168.253.231 -k pv_uv[pv] 100zabbix监控nginx的uv uv)cat /var/log/nginx/access.log|awk {print $1}|uniq -c | w…

web前端多媒体标签设置(图片,视频,音频)以及图片热区(usemap)的设置

多媒体标签运用 在HTML中有以下常见多媒体标签&#xff1a; <img> &#xff08;图像标签&#xff09; - 作用&#xff1a;用于在网页中嵌入图像。 - 示例&#xff1a; <img src"image.jpg" alt"这是一张图片"> 。其中 src 属性指定图像的…

硅谷甄选(8)spu

Spu模块 SPU(Standard Product Unit)&#xff1a;标准化产品单元。是商品信息聚合的最小单位&#xff0c;是一组可复用、易检索的标准化信息的集合&#xff0c;该集合描述了一个产品的特性。通俗点讲&#xff0c;属性值、特性相同的商品就可以称为一个SPU。 7.1 Spu模块的静态…

Java面试题库——SSM框架

一、Spring 1.为什么使用Spring&#xff1f; 方便解耦&#xff0c;便于开发&#xff1b; 支持aop切面编程&#xff1b; 声明式事务的支持&#xff1b; 方便程序的测试&#xff1b; 方便集成各种优秀的框架&#xff1b; 降低JavaEE API的使用难度。2.什么是AOP&#xff1f; A…