提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
本文正式开始人工智能的学习,经过前期对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.ndarray
。img[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 提供的一个非常有用的函数,它允许用户定义一个回调函数,当鼠标事件发生时(如点击、释放、移动等),该回调函数会被调用。这在创建交互式应用程序时特别有用,比如图像标注工具、绘图程序等。
代码解释
- draw_test函数 :
event
: 鼠标事件类型,如cv2.EVENT_LBUTTONDOWN
表示左键按下。x
,y
: 鼠标事件发生时的坐标。flags
: 额外的标志位,通常不用。param
: 传递给回调函数的参数,通常不用。
cv2.setMouseCallback('image', draw_test)
设置鼠标回调函数,当在 'image' 窗口中发生鼠标事件时,调用 draw_circle
函数
鼠标所对应的相关参数
鼠标事件的相关代码和运行结果
这里需要注意关于鼠标滑动、释放和其他相关的命名,还有全局变量的定义要首先进行。
视频处理
cv2.VideoCapture
是 OpenCV 库中的一个类,用于从摄像头或视频文件中捕获视频帧。这个类提供了多种方法来控制视频捕获的过程,包括打开视频文件、读取视频帧、获取视频属性等。
- read()`
read()
方法用于从视频源中读取下一帧。它返回一个布尔值和图像帧。布尔值表示是否成功读取了帧,图像帧是一个 NumPy 数组。
- release()`
release()
方法用于释放视频捕获资源。在完成视频处理后,必须调用此方法来释放摄像头或视频文件。
- isOpened()`
isOpened()
方法用于检查视频捕获对象是否已经成功打开。
- get()
和
set()`
get()
和 set()
方法用于获取和设置视频捕获属性。常用的属性包括帧宽、帧高、帧率等。
可执行代码
参数太多的情况下需要记忆,相关练习在后面笔记进行分享。