人工智能之Opencv(小白初学版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

本文正式开始人工智能的学习,经过前期对python的基础学习,为了之后人工智能更好的发展,同样作为小白的新手伙伴可以翻看我之前的笔记,一起讨论相关的知识点!!

一、Opencv概念以及应用

OpenCV其实就是一堆C和C++语言的源代码文件,这些源代码文件中实现了许多常用的计算机视觉算法。

  • OpenCV的全称是Open Source Computer Vision Library,是一个开放源代码的计算机视觉库
  • OpenCV最初由英特尔公司发起并开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用,现在美国Willow Garage为OpenCV提供主要的支持
  • OpenCV可用于开发实时的图像处理,计算机视觉以及模式识别程序,目前在工业界以及科研领域广泛采用

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

opencv重要性

  • 计算机视觉:OpenCV 是计算机视觉领域的标准库之一,广泛应用于图像识别、物体检测、人脸识别、手势识别等。
  • 机器人技术:在机器人导航、环境感知和交互中,OpenCV 用于处理传感器数据和视觉信息。
  • 医学影像:在医学影像分析中,OpenCV 用于图像增强、分割和特征提取。
  • 自动驾驶:在自动驾驶汽车中,OpenCV 用于环境感知、障碍物检测和车道线识别。
  • 安全监控 :在安全监控系统中,OpenCV 用于运动检测、人脸识别和行为分析。
    学习 OpenCV 不仅可以提升你的技术能力,还能为你在计算机视觉和图像处理领域的发展打开更多的门路。无论是学术研究、工业应用还是个人项目,OpenCV 都是一个不可或缺的工具

环境安装

我们应该明白环境设置为虚拟环境:

首先安装Anaconda后打开

创建虚拟环境输入conda create name myenv python-3.8

然后输入 activate myopencv进入虚拟环境

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

pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple 进行成功安装后

在python界面创立新的项目,选取新的解释器,有需要回顾的可以参照我第一篇关于python安装的笔记

二、显示窗口

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

函数原型:

参数说明

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

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

    常见的标志包括:

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

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

  • 相关属性使用:

  • -在这个地方需要注意是如果要将 image = cv2.imread("images/car.png")如果改换了图片的路径,并且是以中文命名,cv2不支持中文包括参数则会进行报错。

    第二种情况是遇到"\t"等转义字符也会导致错误当然可以加一个"r"进行转义

    这里提到了三个函数,cv2.imshow():主要是用来显示图像的

    cv2.namedWindonw():用来创建窗口并设置窗口属性

    cv2.resizewindow():专门用来改变窗口的大小

    都是关于处理图像显示窗口的

这里还提到了ASCII值,设置关于每个键的ASCII可以进行设置终止程序。

创建空白图像

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

函数写法进行举例:

cv2.waitKey(0):

cv2.dertroyAllwindows()


2.读入数据

代码如下(示例):

c 复制代码
data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

该处使用的url网络请求的数据。

3、图像保存

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

参数说明

  • filename (str): 要保存的文件路径和名称。支持的文件格式包括 .**jpg, .png, .bmp, .tiff** 等。
  • img (numpy.ndarray): 要保存的图像。通常是一个二维或三维的 NumPy 数组,表示图像的像素值。
    返回值
  • bool : 成功保存图像返回 True,否则返回 False

4、图像裁剪

在 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 类型。

5、 调整图片大小

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

作用于方便ORC文字图片识别,像素超过ORC文字的阈值,识别不出,需要图片大小进行调整

更为后面学习模型训练 有着相关的调节

6 图像绘制

绘制圆形

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

在这里需要补充两点,可以在将img进行导入后,生成条件语句,如果判断错误和正确。

第二点就是关于imshow中第一个参数是窗口名,需要统一,第二个是数组参数,第一个我输入的时候没有按c_img进行输入,但是最后的结果都是正确的,这里我们应该理解成了关键字传参img=c_img,按照规范书写还是应该c_img。

矩形

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

其中,参数解释如下:

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

绘制图片文字

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

参数说明

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


有几点要说明,此代码最后输入参数还没有输入完整,需要注意的是要安装PIL库,不然就按我最上面的步骤进行安装(进入虚拟环境、安装相关插件)

这里有提到颜色需要找到BGR(蓝绿红)顺序

绘制直线

参数说明

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

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

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

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

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

返回值

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

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

控制鼠标、鼠标事件

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

代码解释

  1. draw_test函数 :
    • event: 鼠标事件类型,如 cv2.EVENT_LBUTTONDOWN 表示左键按下。
    • x, y: 鼠标事件发生时的坐标。
    • flags: 额外的标志位,通常不用。
    • param: 传递给回调函数的参数,通常不用。

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

鼠标所对应的相关参数

鼠标事件的相关代码和运行结果


这里需要注意关于鼠标滑动、释放和其他相关的命名,还有全局变量的定义要首先进行。

视频处理

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

  1. read()`

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

  1. release()`

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

  1. isOpened()`

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

  1. get()set()`

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

可执行代码

参数太多的情况下需要记忆,相关练习在后面笔记进行分享。

相关推荐
lijianhua_97122 小时前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
EDPJ3 小时前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蔡俊锋3 小时前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语3 小时前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背3 小时前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao3 小时前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
诸葛务农3 小时前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年3 小时前
AI Agent智能体开发
人工智能·aigc·ai编程
charlee443 小时前
最小二乘问题详解17:SFM仿真数据生成
c++·计算机视觉·sfm·数字摄影测量·无人机航测
ai生成式引擎优化技术3 小时前
TSPR-WEB-LLM-HIC (TWLH四元结构)AI生成式引擎(GEO)技术白皮书
人工智能