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重建、对象跟踪等高级功能,可根据项目需求进一步探索。

Read more

TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

TWIST2——全身VR遥操控制:采集人形全身数据后,可训练视觉base的自主策略(基于视觉观测预测全身关节位置)

前言 我司内部在让机器人做一些行走-操作任务时,不可避免的需要全身遥操机器人采集一些任务数据,而对于全身摇操控制,目前看起来效果比较好的,并不多 * 之前有个CLONE(之前本博客内也解读过),但他们尚未完全开源 * 于此,便关注到了本文要解读的TWIST2,其核心创新是:无动捕下的全身控制 PS,如果你也在做loco-mani相关的工作,欢迎私我你的一两句简介,邀你加入『七月:人形loco-mani(行走-操作)』交流群 第一部分 TWIST2:可扩展、可移植且全面的人形数据采集系统 1.1 引言与相关工作 1.1.1 引言 如TWIST2原论文所说,现有的人形机器人远程操作系统主要分为三大类: 全身控制,直接跟踪人体姿态,包括手臂、躯干和腿部在内的所有关节以统一方式进行控制(如 HumanPlus [12],TWIST [1] ———— TWIST的介绍详见此文《TWIST——基于动捕的全身遥操模仿学习:教师策略RL训练,学生策略结合RL和BC联合优化(可训练搬箱子)》 部分全身控制,

By Ne0inhk
侠客行・iOS 26 Liquid Glass TabBar 破阵记

侠客行・iOS 26 Liquid Glass TabBar 破阵记

引子 话说侠客岛旁的 “码农山庄” 里,有位青年开发者石破天,一手 SwiftUI 功夫练得炉火纯青,身旁常伴着心思缜密的产品女侠阿绣。 这日,山庄接到一桩棘手活计 —— 玄铁老怪掌管的 “APP 审核阁” 放出话来,凡要上 iOS 26 的 APP,必过Liquid Glass设计关,尤其Tab Bar这块,稍有差池便打回重练。 在本篇侠客行中,您将学到如下内容: * 引子 * 1. 📱 初探 iOS 26 的 Tab Bar:旧功新用,基础先扎牢 * 2. 🔍 拆解 Tab Bar 的模糊特效:藏在 “滚动容器” 里的玄机 * 3. 📜 给 TabView 加 “缩骨功”

By Ne0inhk

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快?

三大扩散模型对比:Z-Image-Turbo、ComfyUI、Stable Diffusion谁更快? 技术选型背景与性能挑战 在AI图像生成领域,生成速度已成为决定用户体验和生产效率的核心指标。尽管Stable Diffusion系列模型凭借其强大的生成能力成为行业标准,但其通常需要数十步推理才能获得高质量结果,单张图像生成耗时往往超过30秒。随着实时创作、批量设计等场景需求激增,开发者迫切需要更高效的替代方案。 阿里通义实验室推出的 Z-Image-Turbo 模型通过蒸馏训练与架构优化,宣称可在1-10步内完成高质量图像生成,显著缩短响应时间。与此同时,ComfyUI 作为基于节点式工作流的Stable Diffusion前端工具,在灵活性和可控性上表现突出;而原始 Stable Diffusion WebUI(如AUTOMATIC1111) 则以功能全面著称。三者定位不同,但在实际使用中常被用于同类任务。 本文将从生成速度、质量稳定性、部署复杂度、资源消耗四大维度,对这三种主流扩散模型方案进行系统性对比分析,并结合真实运行数据给出选型建议。 方案一:Z-Image

By Ne0inhk

FPGA高速通信:Aurora64B/66B IP使用指南

Aurora 64B/66B IP核配置及使用详解 Aurora 64B/66B 是 Xilinx(现 AMD)提供的一种高速串行通信协议 IP 核,专为 FPGA 设计,支持点对点数据传输,适用于数据中心、高性能计算等场景。本指南将帮助初学者轻松调用该 IP 核,实现编码、译码和传输回环功能。内容包括 IP 核配置、端口介绍、使用方法、example design 调用、关键模块(如 framegen 和 framecheck)的作用,以及完整实现步骤。指南基于 Vivado 设计工具,确保真实可靠。 1. Aurora 64B/66B IP核简介 Aurora

By Ne0inhk