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

OpenCV day6

函数内容接上文:OpenCV day4-CSDN博客  , OpenCV day5-CSDN博客

目录

平滑(模糊)

25.cv2.blur():

26.cv2.boxFilter():

27.cv2.GaussianBlur():

28.cv2.medianBlur():

29.cv2.bilateralFilter():

锐化与边缘检测

30.cv2.filter2D():

31.cv2.Sobel():

32.cv2.Scharr():

33.cv2.Laplacian():

34.cv2.Canny():

绘图与标注

35.cv2.line():

36.cv2.rectangle():

37.cv2.polylines():

38.cv2.ellipse():

39.cv2.circle():

40.cv2.putText():

轮廓分析

41.cv2.findContours():

42.cv2.drawContours():

43.cv2.approxPolyDP():


平滑(模糊)

25.cv2.blur():

功能对图像进行均值模糊(平滑处理),通过邻域像素的平均值减少噪声或细节。
参数1. src:输入图像(单通道或多通道)。
2. ksize:模糊核大小(如 (5,5))。
3. anchor(可选):锚点位置(默认 (-1,-1) 表示核中心)。
4. borderType(可选):边界填充方式(如 cv2.BORDER_DEFAULT)。
返回值模糊后的图像(numpy.ndarray)。

关键点

  • 均值滤波:核内所有像素取平均,适用于简单去噪(但可能边缘模糊)。

  • 核大小ksize 必须是正奇数(如 (3,3)(5,5))。

26.cv2.boxFilter():

功能对图像进行方框滤波(均值滤波的通用版本,可控制归一化)。
参数1. src:输入图像。
2. ddepth:输出图像深度(如 -1 表示与输入相同)。
3. ksize:滤波核大小(如 (3,3))。
4. normalize(可选):是否归一化(默认 True,效果同 cv2.blur())。
5. anchor(可选):锚点位置(默认核中心)。
6. borderType(可选):边界填充方式(如 cv2.BORDER_REFLECT)。
返回值滤波后的图像(numpy.ndarray)。

关键特性

  • 归一化normalize=True 时等同于 cv2.blur()(求均值),False 时直接求和(可能导致值溢出)。

  • 灵活性:可自定义输出图像深度(如 cv2.CV_32F 保留浮点结果)。

27.cv2.GaussianBlur():

功能对图像进行高斯模糊(基于高斯分布的加权平均滤波,有效减少噪声并保留边缘)。
参数1. src:输入图像(支持多通道)。
2. ksize:高斯核大小(宽高为正奇数,如(5,5))。
3. sigmaX:X方向标准差(控制模糊强度,0表示自动计算)。
4. sigmaY(可选):Y方向标准差(默认同sigmaX)。
5. borderType(可选):边界填充方式(如cv2.BORDER_DEFAULT)。
返回值高斯模糊后的图像(numpy.ndarray)。

关键特性

  • 高斯权重:中心像素权重高,边缘权重低,比均值模糊更保边缘。

  • 标准差sigma越大,模糊效果越强(若为0,则根据ksize自动计算)。

  • 核大小:必须是正奇数(如(3,3)(5,5))。

28.cv2.medianBlur():

功能对图像进行中值模糊(用邻域像素的中值替代中心像素,有效去除椒盐噪声)。
参数1. src:输入图像(支持单通道或多通道,但深度需为CV_8UCV_32F)。
2. ksize:滤波核大小(必须为大于1的奇数,如3、5等)。
返回值中值滤波后的图像(numpy.ndarray)。

关键特性

  • 非线性滤波:取邻域中位数,非均值/加权平均,适合去除椒盐噪声(突发的黑白噪点)。

  • 保护边缘:相比均值模糊,能更好保留锐利边缘。

  • 核限制:核大小必须是奇数(如3、5、7),且不能为1。

29.cv2.bilateralFilter():

功能对图像进行双边滤波,在平滑噪声的同时保留边缘(非线性能量保持滤波)。
参数1. src:输入图像(8位或浮点型,单通道或多通道)。
2. d:邻域直径(若≤0则根据sigmaSpace计算)。
3. sigmaColor:颜色空间标准差(控制颜色相似性权重)。
4. sigmaSpace:坐标空间标准差(控制距离权重)。
5. borderType(可选):边界填充方式(默认cv2.BORDER_DEFAULT)。
返回值滤波后的图像(numpy.ndarray)。

关键特性

  • 边缘保留:结合颜色相似性空间距离双重权重,避免边缘模糊。

  • 参数敏感sigmaColor越大,颜色容忍度越高;sigmaSpace越大,远处像素影响越大。

  • 计算较慢:比高斯滤波耗时,适合小区域或实时性要求不高的场景。

锐化与边缘检测

30.cv2.filter2D():

功能对图像进行自定义卷积操作,通过用户定义的核(Kernel)实现滤波效果。
参数1. src:输入图像(单通道或多通道)。
2. ddepth:输出图像深度(如 -1 表示与输入相同)。
3. kernel:卷积核(numpy.ndarray,需为单通道浮点矩阵)。
4. anchor(可选):核的锚点位置(默认中心)。
5. delta(可选):卷积后叠加的常数(默认0)。
6. borderType(可选):边界填充方式(如 cv2.BORDER_CONSTANT)。
返回值卷积后的图像(numpy.ndarray)。

关键特性

  • 灵活性强:可自定义核实现锐化、边缘检测、模糊等效果。

  • 数学本质:核与图像局部区域做点乘后求和(离散卷积运算)。

  • 边界处理:默认填充黑色,可通过 borderType 调整

31.cv2.Sobel():

功能使用Sobel算子计算图像的一阶梯度(用于边缘检测)。
参数1. src:输入图像(单通道)。
2. ddepth:输出图像深度(如cv2.CV_64F保留负梯度)。
3. dx:x方向导数阶数(如1表示检测垂直边缘)。
4. dy:y方向导数阶数(如1表示检测水平边缘)。
5. ksize(可选):Sobel核大小(默认3,仅支持1/3/5/7)。
6. scale(可选):缩放因子(默认1)。
7. delta(可选):结果叠加的常数(默认0)。
8. borderType(可选):边界填充方式(默认cv2.BORDER_DEFAULT)。
返回值梯度图像(numpy.ndarray)。

关键特性

  1. 梯度方向

    • dx=1, dy=0:检测垂直边缘(对x方向求导)。

    • dx=0, dy=1:检测水平边缘(对y方向求导)。

    • dx=1, dy=1:同时检测两个方向的边缘(不常用,推荐分开计算后合并)。

  2. 核大小

    • ksize=1:使用1×3或3×1核(无高斯平滑)。

    • ksize=3(默认):3×3核,含高斯权重,抗噪性更好。

  3. 输出深度

    • 使用cv2.CV_64F保留负梯度值,最后取绝对值:

grad_x = cv2.Sobel(img, cv2.CV_64F, 1, 0)
abs_grad = cv2.convertScaleAbs(grad_x)  # 转为8位无符号

32.cv2.Scharr():

项目说明
功能使用Scharr算子计算图像的一阶梯度(比Sobel更精确的边缘检测)。
参数1. src:输入图像(单通道)。
2. ddepth:输出图像深度(如cv2.CV_64F)。
3. dx:x方向导数阶数(1或0)。
4. dy:y方向导数阶数(1或0)。
5. scale(可选):缩放因子(默认1)。
6. delta(可选):结果叠加的常数(默认0)。
7. borderType(可选):边界填充方式(默认cv2.BORDER_DEFAULT)。
返回值梯度图像(numpy.ndarray)。

核心特性

  1. 与Sobel的对比

    • 更高精度:Scharr算子使用3×3核时,对梯度的近似计算比Sobel更精确(尤其对对角边缘)。

    • 固定核大小:仅支持ksize=3(不可像Sobel那样选择1/5/7)。

  2. 梯度方向

    • dx=1, dy=0:检测垂直边缘

    • dx=0, dy=1:检测水平边缘

    • 不支持dx=dy=1(需分开计算后合并)。

33.cv2.Laplacian():

项目说明
功能使用拉普拉斯算子计算图像的二阶导数,用于边缘检测(对噪声敏感,但能检测全方向边缘)。
参数1. src:输入图像(单通道)。
2. ddepth:输出图像深度(如 cv2.CV_64F 保留负值)。
3. ksize(可选):核大小(默认1,仅支持1/3/5/7)。
4. scale(可选):缩放因子(默认1)。
5. delta(可选):结果叠加的常数(默认0)。
6. borderType(可选):边界填充方式(默认 cv2.BORDER_DEFAULT)。
返回值二阶梯度图像(numpy.ndarray)。

34.cv2.Canny():

功能使用Canny算法进行多阶段边缘检测(低错误率+边缘细化)。
参数1. image:输入图像(必须为单通道灰度图)。
2. threshold1:低阈值(弱边缘筛选)。
3. threshold2:高阈值(强边缘确认)。
4. apertureSize(可选):Sobel算子核大小(默认3)。
5. L2gradient(可选):梯度计算方式(True用L2范数更精确,默认False用L1范数)。
返回值二值边缘图像(numpy.ndarray,边缘=255,背景=0)。

关键特性

  1. 双阈值机制

    • 强边缘:梯度值 > threshold2 → 保留。

    • 弱边缘threshold1 < 梯度值 ≤ threshold2 → 仅当与强边缘连接时保留。

    • 建议比例threshold2 ≈ 2×threshold1(如 50, 150)。

  2. 处理流程

    
    
  3. 输出效果

    • 边缘为细线(1像素宽),背景纯黑。

    • 对噪声鲁棒,但依赖阈值参数调优。

绘图与标注

35.cv2.line():

功能在图像上绘制一条线段。
参数1. img:输入图像(直接修改该图像)。
2. pt1:线段起点坐标 (x1, y1)
3. pt2:线段终点坐标 (x2, y2)
4. color:线条颜色(BGR三元组,如 (255,0,0) 表示红色)。
5. thickness(可选):线条粗细(默认1)。
6. lineType(可选):线条类型(如 cv2.LINE_AA 抗锯齿)。
7. shift(可选):坐标小数位数(默认0)。
返回值无(直接修改输入图像)。

关键特性

  1. 坐标系统

    • 原点 (0,0) 在图像左上角,x向右增长,y向下增长。

  2. 线条样式

    • lineType=cv2.LINE_AA:抗锯齿线条(更平滑,但速度稍慢)。

    • lineType=cv2.LINE_8:8连通快速绘制(默认)。

  3. 颜色模式

    • BGR顺序:OpenCV默认格式(与RGB相反),例如红色为 (0,0,255)

36.cv2.rectangle():

功能在图像上绘制矩形(空心或实心)。
参数1. img:输入图像(直接修改该图像)。
2. pt1:矩形左上角坐标 (x1, y1)
3. pt2:矩形右下角坐标 (x2, y2)
4. color:矩形颜色(BGR三元组,如 (0,255,0) 表示绿色)。
5. thickness(可选):线条粗细(默认1,负数表示填充矩形)。
6. lineType(可选):线条类型(如 cv2.LINE_AA 抗锯齿)。
7. shift(可选):坐标小数位数(默认0)。
返回值无(直接修改输入图像)。

关键特性

  1. 坐标定义

    • pt1 和 pt2 分别对应矩形的左上角右下角(无需保证 x2>x1 或 y2>y1,函数会自动处理)。

  2. 填充模式

    • thickness=-1:用指定颜色填充整个矩形。

    • thickness≥1:绘制空心矩形边框。

  3. 颜色与样式

    • BGR顺序:例如蓝色为 (255,0,0)

    • lineType=cv2.LINE_AA:抗锯齿边框(适合倾斜矩形)。

37.cv2.polylines():

功能在图像上绘制一个或多个多边形(空心或实心)。
参数1. img:输入图像(直接修改该图像)。
2. pts:多边形顶点数组(格式见示例)。
3. isClosed:是否闭合多边形(True=首尾相连)。
4. color:线条颜色(BGR三元组)。
5. thickness(可选):线条粗细(默认1)。
6. lineType(可选):线条类型(如 cv2.LINE_AA)。
7. shift(可选):坐标小数位数(默认0)。
返回值无(直接修改输入图像)。

关键特性

  1. 顶点格式

    • 单个多边形:np.array([[x1,y1], [x2,y2], ...], dtype=np.int32)

    • 多个多边形:[poly1_pts, poly2_pts, ...](列表包裹多个数组)

  2. 闭合控制

    • isClosed=True:自动连接首尾点(如绘制五角星)。

    • isClosed=False:开放路径(如绘制折线)。

  3. 批量绘制

    • 可一次性绘制多个多边形,比循环调用 cv2.line() 更高效。

38.cv2.ellipse():

项目说明
功能在图像上绘制椭圆(空心或实心)、圆弧或扇形。
参数1. img:输入图像(直接修改)。
2. center:椭圆中心 (x,y)
3. axes:主轴长度 (长轴,短轴)
4. angle:旋转角度(顺时针,度)。
5. startAngle:起始角度(0°为3点钟方向)。
6. endAngle:结束角度(如360°完整椭圆)。
7. color:颜色(BGR)。
8. thickness(可选):线宽(默认1,-1填充)。
9. lineType(可选):线型(如cv2.LINE_AA)。
10. shift(可选):坐标小数位数(默认0)。
返回值无(直接修改输入图像)。

关键特性

  1. 角度定义

    • angle:椭圆整体旋转角度(如0°时长轴水平)。

    • startAngle/endAngle:局部弧线范围(0°→360°绘制完整椭圆)。

  2. 填充模式

    • thickness=-1:填充图形(如绘制实心圆)。

    • thickness≥1:绘制边框。

  3. 特殊图形

    • :设 axes=(r,r) 且 angle=0

    • 扇形:设 startAngle=30, endAngle=270

39.cv2.circle():

功能在图像上绘制圆形(空心或实心)。
参数1. img:输入图像(直接修改)。
2. center:圆心坐标 (x,y)
3. radius:圆半径(像素)。
4. color:颜色(BGR三元组)。
5. thickness(可选):线宽(默认1,-1表示填充)。
6. lineType(可选):线型(如 cv2.LINE_AA 抗锯齿)。
7. shift(可选):坐标小数位数(默认0)。
返回值无(直接修改输入图像)。

关键特性

  1. 坐标系统

    • 圆心 (x,y) 的坐标系原点在图像左上角,x向右增长,y向下增长。

  2. 填充模式

    • thickness=-1:绘制实心圆(如标记目标中心点)。

    • thickness≥1:绘制空心圆(如标记检测框)。

  3. 抗锯齿

    • lineType=cv2.LINE_AA:边缘平滑(适合高分辨率图像)。

    • lineType=cv2.LINE_8:快速绘制(默认)

40.cv2.putText():

项目说明
功能在图像上绘制文字(支持多种字体、大小和样式)。
参数1. img:输入图像(直接修改)。
2. text:要绘制的字符串。
3. org:文字左下角起点 (x,y)
4. fontFace:字体类型(如 cv2.FONT_HERSHEY_SIMPLEX)。
5. fontScale:字体缩放因子(大小)。
6. color:文字颜色(BGR三元组)。
7. thickness(可选):文字粗细(默认1)。
8. lineType(可选):线型(如 cv2.LINE_AA)。
9. bottomLeftOrigin(可选):坐标系原点是否在左下角(默认False,即左上角)。
返回值无(直接修改输入图像)。

关键特性

  1. 字体支持

    • 常用字体:cv2.FONT_HERSHEY_SIMPLEX(标准)、cv2.FONT_HERSHEY_SCRIPT_SIMPLEX(手写体)等。

    • 中文支持:需加载中文字体文件(如 Pillow 库配合使用)。

  2. 坐标系统

    • org 默认基于左上角坐标系((0,0) 在左上角)。

    • 设 bottomLeftOrigin=True 可切换为左下角坐标系(数学坐标系)。

  3. 抗锯齿

    • lineType=cv2.LINE_AA:文字边缘平滑(推荐)。

    • lineType=cv2.LINE_8:快速渲染(默认)。

轮廓分析

41.cv2.findContours():

功能从二值图像中提取轮廓(可用于物体形状分析、边缘检测等)。
参数1. image:输入二值图像(通常需先阈值化或边缘检测)。
2. mode:轮廓检索模式(如 cv2.RETR_EXTERNAL 仅外轮廓)。
3. method:轮廓近似方法(如 cv2.CHAIN_APPROX_SIMPLE 压缩冗余点)。
4. offset(可选):轮廓点坐标偏移量(默认 (0,0))。
返回值1. contours:轮廓列表(每个轮廓为 np.array 的点集)。
2. hierarchy:轮廓层级关系(树结构描述父子轮廓)。

关键参数详解

1. 检索模式(mode

模式说明
cv2.RETR_EXTERNAL仅检测最外层轮廓(忽略内部孔洞)。
cv2.RETR_LIST检测所有轮廓,无层级关系(hierarchy 为无效值)。
cv2.RETR_TREE检测所有轮廓并建立完整层级树(记录父子关系)。

2. 近似方法(method

方法说明
cv2.CHAIN_APPROX_NONE存储轮廓所有点(坐标完整,但冗余)。
cv2.CHAIN_APPROX_SIMPLE压缩水平、垂直、对角线方向的冗余点(如矩形仅保留4个角点)。

42.cv2.drawContours():

功能在图像上绘制轮廓(支持自定义颜色、线宽、层级过滤)。
参数1. image:输入图像(直接修改)。
2. contours:轮廓列表(来自cv2.findContours())。
3. contourIdx:要绘制的轮廓索引(-1表示全部)。
4. color:轮廓颜色(BGR三元组)。
5. thickness(可选):线宽(默认1,-1表示填充)。
6. lineType(可选):线型(如cv2.LINE_AA)。
7. hierarchy(可选):层级关系(用于过滤)。
8. maxLevel(可选):最大绘制层级(默认0,仅当前层)。
9. offset(可选):轮廓点坐标偏移量。
返回值无(直接修改输入图像)。

关键特性

  1. 轮廓选择

    • contourIdx=-1:绘制所有轮廓。

    • contourIdx=2:仅绘制列表中第3个轮廓(索引从0开始)。

  2. 填充模式

    • thickness=-1:填充轮廓内部(如生成掩膜)。

    • thickness≥1:绘制空心轮廓。

  3. 层级控制

    • 结合 hierarchy 和 maxLevel 可选择性绘制子轮廓(如只画最外层)。

43.cv2.approxPolyDP():

功能Douglas-Peucker算法对轮廓多边形进行近似(减少顶点数,保持形状)。
参数1. curve:输入轮廓(np.array 形状为 (N,1,2))。
2. epsilon:近似精度(值越小,越接近原始轮廓)。
3. closed:是否闭合轮廓(默认 True)。
返回值近似后的多边形点集(np.array 形状为 (M,1,2),M≤N)。

关键特性

  1. 算法原理

    • 通过设定最大距离容差(epsilon)压缩冗余顶点,保留关键转折点

  2. 参数选择

    • epsilon 通常取轮廓周长的百分比(如 0.02*cv2.arcLength(curve, True))。

    • closed=True 时强制首尾相连。

  3. 应用场景

    • 简化复杂轮廓(如文档边界矫正)。

    • 形状分类(通过顶点数判断矩形、三角形等)。

注意事项

  • 输入格式:轮廓必须是 (N,1,2) 形状(与 cv2.findContours() 输出一致)。

  • 精度控制epsilon 过大可能导致过度简化(如六边形变三角形)。

  • 闭合性:开放曲线(如折线)需设 closed=False

相关文章:

  • 责任链模式:从 Sentinel 流控到审批流程的链式处理
  • 什么是Netty
  • 常见免杀框架的使用(3款)---【AniYaGUI1.2.0、AV_Evasion_Tool掩日、FoxBypass_V1.0】
  • IHC肿瘤标志物 | 常见前列腺癌诊断
  • RAG-分块策略
  • 项目实战--新闻分类
  • 如何从EndNote中将某一篇手稿里面涉及到的引用文献导出,导出格式为bib?
  • 北京SMT贴片厂精密制造关键工艺
  • ESP-IDF教程2 GPIO - 输入、输出和中断
  • 【C++】 —— 笔试刷题day_19
  • STM32 HAL 通用定时器延时函数
  • 观察者 ➜ 事件总线:一路走来的碎碎念
  • 贪心、动态规划、其它算法基本原理和步骤
  • 00.IDEA 插件推荐清单(2025)
  • fastdds:传输层SHM和DATA-SHARING的区别
  • java输出HelloWorld
  • C语言动规学习
  • HOOPS Exchange 与HOOPS Communicator集成:打造工业3D可视化新标杆!
  • 【SAP ME 44】在 HANA DB中报废SFC时的SHOP_ORDER表记录锁定
  • MyBatis框架
  • 马上评丨超常设置战略急需专业,意味着什么
  • 透纳仍是英国最好的艺术家,浦东美术馆有他的画展
  • 经济日报刊文:如何破除“内卷式”竞争
  • 建行深圳市分行原副行长李华峰一审被判15年
  • 新片|真人版《星际宝贝史迪奇》5月23日与北美同步上映
  • “何以中国·闽山闽水物华新”网络主题宣传活动在福建武夷山启动