Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo

Python中cv2 (OpenCV, opencv-python)库的安装、使用方法demo

 

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由英特尔公司于1999年首次发布,目前由非盈利组织OpenCV.org维护。OpenCV包含了超过2500种优化算法,涵盖从基础的图像处理到高级的机器学习应用。

主要特性包括:

  1. 跨平台支持(Windows/Linux/MacOS/Android/iOS)
  2. 支持多种编程语言(C++/Python/Java等)
  3. 丰富的图像处理功能(滤波、变换、特征检测等)
  4. 强大的计算机视觉算法(目标检测、人脸识别、运动跟踪等)
  5. 深度学习模块(DNN模块支持主流框架模型)

典型应用场景:

  1. 安防监控:人脸识别、异常行为检测
  2. 自动驾驶:车道检测、交通标志识别
  3. 医疗影像:病灶检测、图像增强
  4. 工业检测:产品质量自动检测
  5. 增强现实:虚拟对象叠加

安装方法(Python版):

pip install opencv-python # 基础模块 pip install opencv-contrib-python # 包含额外模块 

基本使用示例(Python):

import cv2 # 读取图像 img = cv2.imread('image.jpg') # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 显示图像 cv2.imshow('Example', gray) cv2.waitKey(0) cv2.destroyAllWindows() 

高级功能示例(人脸检测):

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) 

OpenCV还提供了:

  1. 视频处理功能(帧提取、背景减除等)
  2. 相机标定和3D重建
  3. 机器学习算法(SVM、KNN等)
  4. GPU加速支持(通过CUDA)
  5. 与深度学习框架(TensorFlow/PyTorch)的集成

最新版本(截至2023年)OpenCV 4.x系列新增了:

  • 改进的深度学习支持
  • 更好的Python API
  • 增强的实时性能
  • 新的算法实现

  

基础安装

pip install opencv-python # 仅包含主要模块 pip install opencv-contrib-python # 包含额外模块 

完整开发环境配置

  1. 安装Python 3.6+
  2. 安装NumPy库

验证安装:

import cv2 print(cv2.__version__) 

安装OpenCV:

pip install opencv-contrib-python-headless 

 

简单示例(人脸检测):

import cv2 # 加载预训练模型 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 读取图像 img = cv2.imread('test.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 绘制矩形框 for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('img',img) cv2.waitKey(0) 

最新版本(截至2023年)OpenCV 4.x新增了对深度学习模型更好的支持(如Darknet、TensorFlow、PyTorch模型导入),改进了DNN模块的性能,并增加了对ARM架构的优化。

安装方法

OpenCV可以通过多种方式安装到Python环境中:

通过conda安装

conda install -c conda-forge opencv 

指定版本安装

pip install opencv-python==4.5.5.64 

完整安装(包含contrib模块):

pip install opencv-contrib-python 

基础安装(仅核心模块):

pip install opencv-python 

基础使用示例

1. 图像读取与显示

import cv2 # 读取图像 image = cv2.imread('example.jpg') # 支持JPG、PNG、BMP等多种格式 # 检查图像是否成功加载 if image is None: print("无法加载图像,请检查路径是否正确") else: # 显示图像 cv2.imshow('Example Image', image) # 等待按键输入后关闭窗口 cv2.waitKey(0) cv2.destroyAllWindows() 

2. 图像基本操作

# 获取图像属性 height, width, channels = image.shape print(f"图像尺寸: {width}x{height}, 通道数: {channels}") # 转换为灰度图 gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 保存图像 cv2.imwrite('gray_example.jpg', gray_image) # 调整图像大小 resized_image = cv2.resize(image, (640, 480)) # 裁剪图像 cropped_image = image[100:300, 200:400] # y范围,x范围 

3. 视频处理

# 读取视频文件 video = cv2.VideoCapture('example.mp4') # 检查视频是否成功打开 if not video.isOpened(): print("无法打开视频文件") else: while True: ret, frame = video.read() if not ret: break # 在此处添加处理逻辑 processed_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('Video', processed_frame) if cv2.waitKey(25) & 0xFF == ord('q'): break video.release() cv2.destroyAllWindows() 

高级功能示例

1. 人脸检测

# 加载预训练的人脸检测模型 face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # 检测人脸 faces = face_cascade.detectMultiScale(gray_image, scaleFactor=1.1, minNeighbors=5) # 在图像上绘制矩形框标记人脸 for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.imshow('Detected Faces', image) cv2.waitKey(0) 

2. 特征点检测

# 使用SIFT检测特征点 sift = cv2.SIFT_create() keypoints = sift.detect(gray_image, None) # 绘制特征点 image_with_keypoints = cv2.drawKeypoints(image, keypoints, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow('Keypoints', image_with_keypoints) cv2.waitKey(0) 

3. 图像阈值处理

# 自适应阈值处理 thresh = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) cv2.imshow('Adaptive Threshold', thresh) cv2.waitKey(0) 

实用技巧

视频编解码问题

问题描述

处理视频文件时可能遇到"Could not find codec parameters"等编解码器错误,这是因为OpenCV依赖外部编解码器支持。

解决方法

安装FFmpeg以支持更多视频格式:

pip install ffmpeg-python 

完整解决方案

pip install ffmpeg-python opencv-python 

import cv2 print(cv2.getBuildInformation()) # 查看支持的编解码器 

  1. 参数为0表示无限等待按键
  2. 参数为正数表示等待的毫秒数
  3. 必须调用waitKey(),否则窗口无法正常响应
  4. 安装FFmpeg二进制文件:
    • Windows: 下载官方编译版本并添加到PATH
    • Linux: sudo apt-get install ffmpeg
    • Mac: brew install ffmpeg
  5. 安装Python包装库:
  6. 验证安装:

ROI(感兴趣区域)处理

roi = image[100:300, 200:400].copy() # 使用copy()避免原图被修改 roi[:,:,0] = 0 # 将蓝色通道置零 image[100:300, 200:400] = roi 

常见问题解决方法

中文路径问题

问题描述

在使用OpenCV的imread()函数读取中文路径图片时,经常会出现读取失败的情况,这是因为OpenCV的底层实现不完全支持Unicode编码的路径。

解决方法

使用numpy的fromfile和imdecode组合来读取中文路径图片:

import cv2 import numpy as np def cv_imread(file_path): """ 读取中文路径图片 :param file_path: 图片路径(支持中文) :return: 读取的图片数据 """ cv_img = cv2.imdecode(np.fromfile(file_path, dtype=np.uint8), -1) return cv_img 

使用示例

img = cv_imread("D:/测试/样例图片.jpg") cv2.imshow("测试窗口", img) cv2.waitKey(0) 

图像显示窗口无法关闭

问题描述

在使用cv2.imshow()显示图像后,窗口可能无法正常关闭,或者程序卡住无响应。

解决方法

确保在imshow()后调用waitKey()函数,该函数会等待键盘输入并处理窗口事件:

cv2.imshow("Image Window", image) cv2.waitKey(0) # 等待任意按键 cv2.destroyAllWindows() # 关闭所有窗口 

注意事项

多窗口显示

cv2.namedWindow('Window1', cv2.WINDOW_NORMAL) cv2.namedWindow('Window2', cv2.WINDOW_NORMAL) cv2.imshow('Window1', image1) cv2.imshow('Window2', image2) 

性能优化

# 使用UMat加速计算 image_umat = cv2.UMat(image) result_umat = cv2.GaussianBlur(image_umat, (5, 5), 0) result = result_umat.get() 

典型应用场景

1. 读取各种格式的视频文件

支持读取MP4、AVI、MOV、MKV、FLV等常见视频格式,适用于本地视频文件分析处理。例如:

从监控系统中读取MP4格式的监控录像 处理用户上传的AVI格式自制视频 分析MKV封装的影视作品

3. 转换视频格式

提供视频编码转换功能,支持:

  1. 视频摘要:提取关键帧生成视频缩略图
  2. 图像分析:提取特定时间点的帧进行图像处理
  3. 训练数据:从视频中按固定间隔提取帧用于AI训练
  4. 取证分析:提取监控视频中的关键帧作为证据
  5. 常见转换:MP4转AVI、MOV转MP4、FLV转MP4等
  6. 参数调整:可设置输出视频的分辨率、码率、帧率等参数
  7. 转码流程:读取源文件→解码→编码→输出目标格式
  8. 实时监控系统:处理多个RTSP流的路由和转发
  9. 智能分析:对RTSP流进行实时人脸识别或行为分析
  10. 远程教学:对教育直播流进行处理和录制
2. 处理RTSP视频流

实时处理网络摄像头的视频流数据,典型应用包括:

(注:以上所有功能都支持批量处理,可同时处理多个视频文件或视频流)

4. 提取视频帧

支持从视频中提取关键帧或按时间间隔提取帧,应用场景:

通过以上示例,您可以开始使用OpenCV进行基本的图像和视频处理。OpenCV功能强大,还支持机器学习、3D重建、对象跟踪等高级功能,可根据项目需求进一步探索。