# opencv **Repository Path**: tbearmonkey/opencv ## Basic Information - **Project Name**: opencv - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-16 - **Last Updated**: 2024-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 搭建环境 1. 安装python版本(3.9.6) 2. 安装pycharm软件(2024.3) 3. pycharm软件修改镜像源路径:pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ 4. 添加opencv软件包:设置>项目>Python解释器>加号>opencv-python & opencv-contrib-python 5. 下载opencv-4.5.2-vc14_vc15.exe源码 # 关键函数说明 ## CascadeClassifier() > `CascadeClassifier` 是 OpenCV 中用于目标检测的类,它通常用于人脸检测、行人检测等任务,尤其是基于 **Haar特征**(Haar-like features)或 **LBP特征**(Local Binary Pattern)训练的级联分类器。`CascadeClassifier` 类封装了训练好的分类器,使得检测过程更加简便。 ``` cv.CascadeClassifier('E:/OpenCV/Download/opencv/sources/data/haarcascades/haarcascade_frontalface_alt2.xml') ``` > - OpenCV 提供了一些预训练的分类器,如用于人脸检测的 `haarcascade_frontalface_default.xml`、眼睛检测的 `haarcascade_eye.xml` 等。 ## detectMultiScale() > `detectMultiScale()` 是 OpenCV 中用于物体检测的函数,尤其常用于人脸检测、车牌识别等任务,通常与 **Haar级联分类器**(Haar Cascade Classifier)或 **LBP级联分类器**(Local Binary Pattern Cascade Classifier)一起使用。 ```python detectMultiScale(image, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30), flags=0) ``` > 1. **image** (必需): > - 输入的图像,通常是灰度图像。 > - 如果输入的是彩色图像,必须先将其转换为灰度图像。 > 2. **scaleFactor** (可选,默认值:`1.1`): > - 这个参数用于对图像进行尺度缩放。因为物体(如人脸)在不同的距离下看起来会有不同的大小,`scaleFactor` 允许我们对图像进行多次缩放,以便更好地检测不同尺度的目标。 > - 一般来说,`scaleFactor` 越大,检测速度越快,但也可能漏掉一些小物体。通常值在 `1.1` 到 `1.4` 之间。 > 3. **minNeighbors** (可选,默认值:`3`): > - 该参数用于指定检测物体时,至少需要多少个相邻的检测窗口才能认为一个区域是一个物体。这个值越大,检测结果越精确,但可能漏掉一些小的物体。通常取值为 3 到 6。 > 4. **minSize** (可选,默认值:`(30, 30)`): > - 最小目标尺寸。只有大于该尺寸的物体才会被检测到。它是一个二元组 `(width, height)`,表示检测窗口的最小尺寸。可以根据实际需要调整,通常用于避免检测到太小的物体。 > 5. **flags** (可选,默认值:`0`): > - 此参数为一些额外的标志,通常为零(即没有特殊设置)。可以用于调整检测过程中的一些其他细节。 ## cap.read() ``` cap.read() 返回的是一个 元组,包含两个值: ret (布尔值): True 表示成功读取了一帧图像。 False 表示读取失败,可能是由于摄像头无法访问,或者没有更多帧可供读取。 frame (图像数组): 如果 ret 为 True,frame 是一个包含当前帧图像的 NumPy 数组(通常是一个形状为 (height, width, channels) 的数组,表示图像的像素数据)。 如果 ret 为 False,frame 可能是一个 None,表示没有成功读取图像。 cap = cv2.VideoCapture(0) # 打开默认摄像头 ret, frame = cap.read() # 读取一帧图像 ``` ## cv.waitKey() ``` cv.waitKey() 中的参数: cv.waitKey(0):表示无限等待,直到按下任意键才会继续执行代码。这在交互式应用中非常常见,但对于视频流来说,它会造成冻结的问题,因为它会一直等待键盘输入,不会继续读取视频帧,从而造成程序无法继续执行(冻结或卡住)。 cv.waitKey(1):表示等待 1 毫秒后检查键盘输入并继续执行。如果没有按键输入,程序会继续执行,且可以刷新视频流。这样可以避免程序因等待输入而卡住。 ```