目录
认识python和pycharm
引言:python作为一种编程语言,是学习cv的主要工具,主要用python进行库的调用。
一、读入(新建&打开)
1.存放
在电脑硬盘中创建一个文件夹存放所有python项目,每个项目存放在不同的子文件夹里。
※
a.项目存放的硬盘建议为C盘以外的硬盘;
b.文件夹命名避免出现中文。
2.前置工作
进入pycharm后先进行虚拟环境配置。
3.新建&打开项目
①点击pycharm左上角的File
②New Project 新建项目
Open 打开项目
③打开预先设置的文件夹或新建文件夹
④右键创建子项目
New-Directory 创建文件夹
New-Python File 创建Python文件
※Directory(文件夹)与Python Package(Python包)的区别:
①文件夹:
a.文件夹是操作系统中的标准目录,用于存储文件和子文件夹。
b.在PyCharm中,可以将文件夹添加到项目中,并将文件放在文件夹中。文件夹通常用于组织项目文件,但它们不是Python模块或包。
c.在Python代码中,无法通过import语句导入文件夹内的内容。
②Python包a.Python包是一种特殊的目录结构,它包含一个名为__init__.py的特殊文件,用于表示该目录是一个包。
b.包内可以包含模块(Python文件)和子包(其他包)。这使得代码组织更加有层次和结构。
c.Python包允许使用import语句导入包内的模块和子包,这样可以更好地组织和封装代码。
二、认识python的库
1.导入库
※一般不用特意导入,除非报错提示缺失该库。
导入流程:例如缺失math库时点击pycharm的Terminal,进入控制台,输入命令pip install math行安装。
※正常下载链接外网,常出现下载过慢或失败的情况,建议导入清华源下载(清华源可能缺少某些最新版本,可以调用其他源下载)
永久替换服务器为清华镜像源:
pip3 install pip -U pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # "pip install pip -U" 是用于执行升级pip的命令;
临时调用某个源(如清华源):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxx # 这里注意,xxx是需要下载的包的名字,例如: # pip install -i https://pypi.tuna.tsinghua.edu.cn/simple torch
2.调用库
格式:import...和from...import...
举例:(调用math库中的sqrt求平方根)
3.阅读函数功能
python通过调用各种库及其中的函数实现功能,了解函数是必要的。
鼠标浮在对应函数上当,会弹出简介。
※对python了解到一定程度后可以进行重要源码的学习,Ctrl+左键点击函数,会跳转到源码界面。
三、路径
1.读取/保存文件
注意文件的绝对路径和相对路径。
2.绝对路径
绝对路径:从本地硬盘到文件位置
3.相对路径
从本文件夹内读取
“.\”表示Python文件所在,可以快捷输入文件名访问
课后练习
1.库的调用练习
题目:
安装好cv库( pip install opencv-python-headless ,我的是4.6.0)后调用练习,复制粘贴以下代码到pycharm中运行调试
import cv2
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow('Face Detection', frame)
# 按'q'键或'esc'退出循环
key = cv2.waitKey(1) & 0xFF
if key == ord('q') or key == 27:
break
cap.release()
cv2.destroyAllWindows()
思考并尝试查阅资料解决:
程序是调用了什么模型才可以运行人脸识别这一功能?并思考什么代码决定了本地调用了视频摄像头?如何改成本地运行的图片/视频?
解题:
a.人脸识别模型:
haarcascade_frontalface_default.xml
b.调用摄像头的代码:
cap = cv2.VideoCapture(0)
cv2.VideoCapture
#原型:VideoCapture(*args,**kwargs)
#作用:初始化VideoCapture类并利用构造函数读入该视频的当前帧。
#参数:一般仅填入一个,即文件名。如果填入整数,则打开对应的捕获设备ID。若为0,则打开默认摄像头。
c.改成本地运行的图片和视频
可用函数:
#cv2.imread(filename, flags) :读取加载图片
#cv2.imshow(winname, mat) : 显示图片
#cv2.waitKey() : 等待图片的关闭
#cv2.imwrite(filename, img) : 保存图片
※目前不会python,AI写的
以下是调用并显示本地视频的代码:
import cv2
# 读取本地视频并循环读取帧
cap = cv2.VideoCapture('video.mp4')
while True:
ret, frame = cap.read()
if not ret:
break
cv2.imshow('Video Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
在这个代码中,我们首先使用cv2.VideoCapture()函数读取本地视频,并在一个无限循环中读取每一帧,并使用cv2.imshow()函数将其显示在名为“Video Frame”的窗口中。如果用户按下“q”键,则退出循环并释放资源,最后关闭所有窗口。
以下是调用并显示本地图片的代码:
import cv2
# 读取本地图片并显示
img = cv2.imread('image.jpg')
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
在这个代码中,我们使用cv2.imread()函数读取本地图片,并使用cv2.imshow()函数将其显示在名为“Image”的窗口中。然后,我们使用cv2.waitKey()函数等待用户按下任意键后,使用cv2.destroyAllWindows()函数关闭所有窗口。
参考资料(对题目中代码函数的解释):
a.CascadeClassifier—级联分类器
CascadeClassifier就是opencv下objdetect模块中用来做目标检测的级联分类器的一个类,它可以帮助我们检测例如车牌、眼睛、人脸等物体。它的大概原理就是判别某个物体是否属于某个分类。以人脸为例,我们可以把眼睛、鼻子、眉毛、嘴巴等属性定义成一个分类器,如果检测到一个模型符合定义人脸的所有属性,那么就认为它是一个人脸
b.可选的人脸检测模型(区别是检测速度和精度不同):
#haarcascade_frontalface_alt.xml
#haarcascade_frontalface_alt2.xml
#haarcascade_frontalface_alt_tree.xml
#haarcascade_frontalface_default.xml
#haarcascade_profileface.xml
c.cv2.VideoCapture
#cv2.VideoCapture
#原型:VideoCapture(*args,**kwargs)
#作用:初始化VideoCapture类并利用构造函数读入该视频的当前帧。
#参数:一般仅填入一个,即文件名。如果填入整数,则打开对应的捕获设备ID。若为0,则打开默认摄像头。
d.cv2.cvtColor()
#cv2.cvtColor() #图像颜色空间转换
#img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY) #灰度化:彩色图像转为灰度图像
#img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB) #彩色化:灰度图像转为彩色图像
# cv2.COLOR_X2Y,其中X,Y = RGB, BGR, GRAY, HSV, YCrCb, XYZ, Lab, Luv, HLS
e.cv2.rectangle
#cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
#画出矩行:img原图、(x,y)是矩阵的左上点坐标、(x+w,y+h)是矩阵的右下点坐标
# (0,255,0)是画线对应的rgb颜色、2是所画的线的宽度。
f.cap.release()
#cap.release()是用来停止捕获视频。
g.cv2.destroyAllWindows()
#cv2.destroyAllWindows():销毁所有窗口
2.读取文件练习
通过相对路径与绝对路径,完成算数练习。
读取11.csv和22.csv,求11.csv中的最小值和22.csv的最大值相加(答案:1000)
import pandas as pd
# 读取第一个表格
df1 = pd.read_csv('11.csv')
# 获取最小值
min_value = df1.min().min()
# 读取第二个表格
df2 = pd.read_csv('22.csv')
# 获取最大值
max_value = df2.max().max()
# 相加
result = min_value + max_value
print(result)