当前位置: 首页 > news >正文

Python:OpenCV 教程

一个开源的计算机视觉和机器学习库。支持Python和C++语法,可用于图像和视频处理,库里含数百个优化算法,涵盖了计算机视觉和图像处理的多个方面。

  • 图像处理:图像滤波、边缘检测、颜色空间转换、形态学操作、特征提取等。
  • 视频分析:视频捕捉、运动分析、物体检测与追踪等。
  • 机器学习与人工智能:OpenCV集成了深度学习框架,可以进行人脸识别、目标检测、图像分类等。
  • 计算机视觉:图像匹配、物体识别、立体视觉、深度图计算等。

1.安装(Python3.x)

pip install opencv-python

如果需要额外的模块(例如 contrib 模块),可以安装 opencv-contrib-python:

pip install opencv-contrib-python

该版本包括更多模块和功能。

用OpenCV完成一次图像读写。对单张图片的操作包括读取、显示、保存。

#导入Opencv库
import cv2#读取图片
image_path = "C:/PythonCode/test001.png"
img = cv2.imread(image_path)#检查读取是否成功
if img is None:print("Error")exit()#显示图偏
cv2.imshow("display Image",img)#等待用户按键输入,0表示无限等待,直到用户按任意键
key = cv2.waitKey(0)#执行按键,当按下s键保存,其他键不保存
if key == ord('s'):  # 如果按下 's' 键# 保存图像output_path = "C:/Users/罗翔/Downloads/saved_image.jpg"cv2.imwrite(output_path, img)print(f"图像已保存为 {output_path}")
else:  # 如果按下其他键print("图像未保存。")
#关闭窗口    
cv2.destroyAllWindows()
模块名描述
cv2.core核心模块,包含了图像处理的基础功能(如图像数组的表示和操作)。
cv2.imgproc图像处理模块,提供图像的各种操作,如滤波、图像变换、形态学操作等。
cv2.highgui图形用户界面模块,提供显示图像和视频的功能。
cv2.video提供视频处理的功能,如视频捕捉、视频流的处理等。
cv2.features2d特征检测与匹配模块,包含了角点、边缘、关键点检测等。
cv2.ml机器学习模块,提供了多种机器学习算法,可以进行图像分类、回归、聚类等。
cv2.calib3d相机校准和 3D 重建模块。
cv2.objdetect 目标检测模块。
cv2.dnn深度学习模块。

2.图像处理基础

可以把图像理解为二维数组,每个图像就是一个多维数组,每个元素对应图像中一个像素。图像的尺寸和颜色模式也可以通过数组的形状来表示。OpenCV通过Numpy数组表示图像数据。

图像基本属性:

  • 尺寸(Width,Height):通过img.shape获取。
  • 颜色通道(Channels):通常RGB三个通道,也有单通道灰度图。
  • 数据类型(Data type):常见有uint8(0-255),也可以是float32或其他。
功能函数示例
读取图像cv2.imread( )

img = cv2.imread('image.jpg'),img存储一个Numpy数组,图片不存在返回None。

显示图像cv2.imshow( )  cv2.imshow("Display Window",image)
等待按键输入cv2.waitKey(0)
关闭所有窗口cv2.destroyAllWindows()
保存图像cv2.imwrite( )cv2.imwrite("output_image.jpg",image)
图像操作
获取像素值image[start,end]pixel = image[100, 100]  # 获取 (100, 100) 处的像素值
修改像素值image[start,end]=[r,g,b]image[100, 100] = [255, 255, 255]  # 将 (100, 100) 处的像素设置为白色
获取ROIimage[start1:end1,start2:end2]roi = image[50:150, 50:150]  # 获取 (50,50) 到 (150,150) 的区域
修改ROIimage[start1:end1,start2:end2]=[R,G,B]image[50:150, 50:150] = [0, 255, 0]  # 将 ROI 区域设置为绿色
分离通道cv2.split()b, g, r = cv2.split(image)
合并通道cv2.merge([b,g,r])merged_image = cv2.merge([b, g, r])

另一些基本操作方法

操作函数/方法说明
访问像素值image[y, x]获取或修改像素值。
图像 ROIimage[y1:y2, x1:x2]获取或修改图像中的矩形区域。
通道分离与合并cv2.split() / cv2.merge()分离或合并图像通道。
图像缩放cv2.resize()调整图像大小。
图像旋转cv2.getRotationMatrix2D()旋转图像。
图像平移cv2.warpAffine()平移图像。
图像翻转cv2.flip()翻转图像。
图像加法cv2.add()对两幅图像进行加法运算。
图像减法cv2.subtract()对两幅图像进行减法运算。
图像混合cv2.addWeighted()对两幅图像进行加权混合。
阈值处理cv2.threshold()对图像进行阈值处理。
平滑处理cv2.blur() / cv2.GaussianBlur()对图像进行平滑处理。
图像位运算
按位与操作cv2.bitwise_and()掩码操作、图像分割
按位或操作cv2.bitwise_or()图像叠加
按位取反操作cv2.bitwise_not()图像反色
按位异或操作cv2.bitwise_xor()图像差异检测

3.图像形态学操作

图像形态学操作是图像处理中的一种重要技术,主要用于处理二值图像(即黑白图像)。

操作函数说明应用场景
腐蚀cv2.erode()用结构元素扫描图像,如果结构元素覆盖的区域全是前景,则保留中心像素。去除噪声、分离物体。
膨胀cv2.dilate()用结构元素扫描图像,如果结构元素覆盖的区域存在前景,则保留中心像素。连接断裂的物体、填充空洞。
开运算cv2.morphologyEx()先腐蚀后膨胀。去除小物体、平滑物体边界。
闭运算cv2.morphologyEx()先膨胀后腐蚀。填充小孔洞、连接邻近物体。
形态学梯度cv2.morphologyEx()膨胀图减去腐蚀图。提取物体边缘。
顶帽运算cv2.morphologyEx()原图减去开运算结果。提取比背景亮的细小物体。
黑帽运算cv2.morphologyEx()闭运算结果减去原图。提取比背景暗的细小物体。

4. 图像边缘检测

图像边缘检测是计算机视觉和图像处理中的一项基本任务,它用于识别图像中亮度变化明显的区域,这些区域通常对应于物体的边界。

是 OpenCV 中常用的边缘检测函数及其说明:

函数算法说明适用场景
cv2.Canny()Canny 边缘检测多阶段算法,检测效果较好,噪声抑制能力强。通用边缘检测,适合大多数场景。
cv2.Sobel()Sobel 算子基于一阶导数的边缘检测,可以检测水平和垂直边缘。检测水平和垂直边缘。
cv2.Scharr()Scharr 算子Sobel 算子的改进版本,对边缘的响应更强。检测细微的边缘。
cv2.Laplacian()Laplacian 算子基于二阶导数的边缘检测,对噪声敏感。检测边缘和角点。

5.图像轮廓检测

轮廓检测是图像处理中的重要任务,用于提取图像中物体的边界。

OpenCV 提供了强大的轮廓检测功能,可以用于物体识别、形状分析、目标跟踪等应用。以下是 OpenCV 图像轮廓检测的详细说明。

轮廓检测的基本概念

  • 轮廓: 图像中物体的边界,由一系列点组成。

  • 轮廓层次结构: 轮廓之间的嵌套关系,例如一个轮廓是否包含另一个轮廓。

  • 轮廓特征: 轮廓的面积、周长、边界矩形、最小外接矩形、最小外接圆等。

轮廓检测常用函数

函数名称功能描述
cv2.findContours()查找图像中的轮廓
cv2.drawContours()在图像上绘制轮廓
cv2.contourArea()计算轮廓的面积
cv2.arcLength()计算轮廓的周长或弧长
cv2.boundingRect()计算轮廓的边界矩形
cv2.minAreaRect()计算轮廓的最小外接矩形
cv2.minEnclosingCircle()计算轮廓的最小外接圆
cv2.approxPolyDP()对轮廓进行多边形近似

轮廓检测的应用

  • 物体识别: 通过轮廓检测可以识别图像中的物体,例如检测圆形、矩形等。
  • 形状分析: 通过计算轮廓的特征(如面积、周长、边界矩形等),可以分析物体的形状。
  • 目标跟踪: 在视频中,可以通过轮廓检测跟踪运动的目标。
  • 图像分割: 通过轮廓检测可以将图像中的物体分割出来。

OpenCV 提供了强大的轮廓检测功能,可以用于提取图像中物体的边界,并计算轮廓的特征。

以下是轮廓检测的主要步骤和函数:

步骤函数说明
图像预处理cv2.cvtColor()将图像转换为灰度图。
二值化处理cv2.threshold()将灰度图转换为二值图像。
查找轮廓cv2.findContours()查找图像中的轮廓。
绘制轮廓cv2.drawContours()绘制检测到的轮廓。
计算轮廓面积cv2.contourArea()计算轮廓的面积。
计算轮廓周长cv2.arcLength()计算轮廓的周长。
计算边界矩形cv2.boundingRect()计算轮廓的边界矩形。
计算最小外接矩形cv2.minAreaRect()计算轮廓的最小外接矩形。
计算最小外接圆cv2.minEnclosingCircle()计算轮廓的最小外接圆。
多边形逼近cv2.approxPolyDP()对轮廓进行多边形逼近。

文章转载自:

http://Bi0KB6hQ.hpkgm.cn
http://TasBWmuY.hpkgm.cn
http://irAfrIk8.hpkgm.cn
http://9KI7uQUZ.hpkgm.cn
http://9wFYxxdK.hpkgm.cn
http://TUrWUHKS.hpkgm.cn
http://iYZFWNZL.hpkgm.cn
http://5XwEIWo2.hpkgm.cn
http://Khgz5aSF.hpkgm.cn
http://aNTrrfpL.hpkgm.cn
http://3u0VtVif.hpkgm.cn
http://X5v25Xpo.hpkgm.cn
http://aMdQTDXF.hpkgm.cn
http://pBMPcMhf.hpkgm.cn
http://waMexlIT.hpkgm.cn
http://0mr4foPO.hpkgm.cn
http://OPO509oE.hpkgm.cn
http://3ohnco1H.hpkgm.cn
http://0s3fZW80.hpkgm.cn
http://NvO4cMCj.hpkgm.cn
http://IJ6QfPAg.hpkgm.cn
http://rjmowzGn.hpkgm.cn
http://8Jdxh9u8.hpkgm.cn
http://6CMkMAGT.hpkgm.cn
http://9g1duWLr.hpkgm.cn
http://W6Vj2G67.hpkgm.cn
http://xmvAVdZk.hpkgm.cn
http://LGzLWUt3.hpkgm.cn
http://y1Q8jGH2.hpkgm.cn
http://bCCTtnpc.hpkgm.cn
http://www.dtcms.com/a/378958.html

相关文章:

  • 视频怎么做成 GIF?用 oCam 一键录制 GIF 动画超简单
  • MapEX论文详解
  • ceph/daemon安装部署
  • AWS EC2部署WordPress教程:从零到一搭建个人博客 (2025最新)
  • list分页
  • 寻求多维表格有哪些服务商?Teable、飞书、WPS、简道云和Airtable
  • 6-获取磁盘分区信息
  • GRASP 实验室研究 论文解读 | 机器人交互:基于神经网络引导变分推理的快速失配估计
  • 元宇宙与金融创新:虚实融合下的金融服务新形态
  • 【基于协同过滤的校园二手交易平台】
  • Oracle APEX 定型文(快速选取功能)
  • 小说创作中的时间轴体验设计:事序图交互与用户体验优化
  • Liunx执行source /etc/profile 报错, -bash: HISTTIMEFORMAT: readonly variable
  • js的事件循环机制的理解
  • MATLAB基于博弈论-云模型的城市道路塌陷风险评价模型
  • 医保购药平台如何对接互联网医院系统源码?技术难点与解决方案
  • 景观设计师的数字画笔:园林景观设计软件有哪些
  • 配置docker常见问题
  • 华宇TAS应用中间件与瀚高股份两款产品完成兼容互认证
  • 详解 C++11
  • GS1-128 校验码计算方法
  • UnityShader:正反面显示不同颜色
  • c++打包pyd文件给Python使用调用函数
  • 设计模式-适配器备忘录组合迭代器
  • Linux上解决telnet失败问题
  • xtuner安装及微调大模型
  • FlexSPI 传输结构体解析
  • 简单的GIT操作学习记录
  • K8S的dashboard部署与访问
  • css之一个元素可以同时应用多个动画效果