欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > OpenCV day7

OpenCV day7

2025/4/26 0:34:07 来源:https://blog.csdn.net/weixin_64646641/article/details/147400102  浏览:    关键词:OpenCV day7

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

目录

轮廓分析

44.cv2.convexHull():

45.cv2.boundingRect():

46.cv2.minAreaRect():

47.cv2.minEnclosingCircle():

形态学操作

48.cv2.getStructuringElement():

49.cv2.erode():

50.cv2.dilate():

51.cv2.morphologyEx():

直方图处理

52.cv2.calcHist():

53.cv2.equalizeHist():

54.cv2.createCLAHE():

55.cv2.HoughLines():

56.cv2.HoughLinesP():


轮廓分析

44.cv2.convexHull():

功能计算轮廓的最小凸包(包围所有轮廓点的最小凸多边形)。
参数1. points:输入轮廓点集(形状为 (N,1,2) 的 np.array)。
2. clockwise(可选):点顺序(True=顺时针,默认 False)。
3. returnPoints(可选):True 返回坐标(默认),False 返回轮廓索引。
返回值凸包点坐标(np.array,形状 (M,1,2))或原轮廓的索引(若 returnPoints=False)。

关键点

  • 输入需为 cv2.findContours() 的轮廓格式。

  • 凸包无凹陷,常用于简化形状分析或计算凸性缺陷。

45.cv2.boundingRect():

功能计算轮廓的外接矩形(非旋转,边与图像轴平行)。
参数points:输入轮廓点集(形状为 (N,1,2) 的 np.array)。
返回值矩形参数元组 (x, y, w, h)
• x,y:左上角坐标
• w,h:宽高

关键点

  • 输入需为 cv2.findContours() 的轮廓格式。

  • 返回的矩形始终为水平/垂直方向,不随轮廓旋转。

46.cv2.minAreaRect():

功能计算轮廓的最小外接矩形(可倾斜,面积最小)。
参数points:输入轮廓点集(形状为 (N,1,2) 的 np.array)。
返回值旋转矩形信息 (center, size, angle)
• center:矩形中心坐标 (x,y)
• size:宽高 (width, height)
• angle:旋转角度(顺时针,-90°~0°)

关键点

  • 输入需为 cv2.findContours() 的轮廓格式。

  • 返回的矩形可旋转,适合倾斜物体(如车牌、文档)。

47.cv2.minEnclosingCircle():

功能计算轮廓的最小外接圆(面积最小的包围圆)。
参数points:输入轮廓点集(形状为 (N,1,2) 的 np.array)。
返回值元组 (center, radius)
• center:圆心坐标 (x,y)
• radius:圆半径

关键点

  • 输入需为 cv2.findContours() 的轮廓格式。

  • 适用于圆形或近圆形物体的包围检测。

形态学操作

48.cv2.getStructuringElement():

功能创建形态学操作(如腐蚀/膨胀)所需的结构化元素(核)
参数1. shape:核形状(cv2.MORPH_RECT矩形,cv2.MORPH_ELLIPSE椭圆,cv2.MORPH_CROSS十字形)。
2. ksize:核大小 (width, height)
3. anchor(可选):锚点位置(默认中心)。
返回值结构化元素(np.array,二值矩阵)。

关键点

  • 核形状:矩形核全为1,椭圆核为内接椭圆,十字核为3像素宽十字线。

  • 应用场景:用于 cv2.erode()cv2.dilate() 等形态学操作。

常见核形状效果

  • 矩形核:均匀处理所有方向。

  • 椭圆核:更适合圆形物体。

  • 十字核:用于保护对角线细节。

49.cv2.erode():

功能对图像进行腐蚀操作(缩小前景物体,去除细小噪声)。
参数1. src:输入图像(通常为二值图)。
2. kernel:结构化元素(来自 cv2.getStructuringElement())。
3. anchor(可选):锚点位置(默认核中心)。
4. iterations(可选):腐蚀次数(默认1)。
5. borderType(可选):边界填充方式(默认 cv2.BORDER_CONSTANT)。
6. borderValue(可选):填充值(默认0)。
返回值腐蚀后的图像(numpy.ndarray)。

关键特性

  1. 腐蚀原理

    • 用核扫描图像,仅当核覆盖区域全为前景时,中心像素才保留为前景,否则置为背景。

  2. 核形状影响

    • 矩形核:均匀腐蚀所有边缘。

    • 十字核:优先腐蚀对角线方向。

    • 椭圆核:更自然的圆形收缩效果。

  3. 迭代次数

    • iterations=2 等价于连续腐蚀两次,效果更强。

50.cv2.dilate():

项目说明
功能对图像进行膨胀操作(扩大前景物体,填充孔洞或断裂部分)。
参数1. src:输入图像(通常为二值图)。
2. kernel:结构化元素(来自 cv2.getStructuringElement())。
3. anchor(可选):锚点位置(默认核中心)。
4. iterations(可选):膨胀次数(默认1)。
5. borderType(可选):边界填充方式(默认 cv2.BORDER_CONSTANT)。
6. borderValue(可选):填充值(默认0)。
返回值膨胀后的图像(numpy.ndarray)。

关键特性

  1. 膨胀原理

    • 用核扫描图像,只要核覆盖区域存在前景像素,中心像素即置为前景。

  2. 核形状影响

    • 矩形核:均匀扩展所有边缘。

    • 十字核:优先填充对角线方向。

    • 椭圆核:更自然的圆形扩展效果。

  3. 迭代次数

    • iterations=2 等价于连续膨胀两次,效果更显著。

51.cv2.morphologyEx():

功能执行高级形态学操作(开运算、闭运算、梯度等复合操作)。
参数1. src:输入图像(通常为二值图)。
2. op:操作类型(如 cv2.MORPH_OPEN)。
3. kernel:结构化元素(来自 cv2.getStructuringElement())。
4. anchor(可选):锚点位置(默认核中心)。
5. iterations(可选):操作次数(默认1)。
6. borderType(可选):边界填充方式(默认 cv2.BORDER_CONSTANT)。
7. borderValue(可选):填充值(默认0)。
返回值处理后的图像(numpy.ndarray)。

操作类型(op)详解

类型等效操作效果
cv2.MORPH_OPEN先腐蚀后膨胀去除小噪声,保持原形状
cv2.MORPH_CLOSE先膨胀后腐蚀填充小孔洞,平滑边缘
cv2.MORPH_GRADIENT膨胀图减腐蚀图提取物体边缘(类似边缘检测)
cv2.MORPH_TOPHAT原图减开运算图突出亮细节(背景均匀时有效)
cv2.MORPH_BLACKHAT闭运算图减原图突出暗细节(背景均匀时有效)

典型应用场景

  1. 开运算:去除指纹图像中的细小噪声。

  2. 闭运算:填充车牌字符中的断裂部分。

  3. 形态学梯度:提取细胞图像的边缘轮廓。

  4. 顶帽运算:检测光照不均匀图像中的亮区域。

注意

  • 彩色图像需分通道处理。

  • 核大小和形状直接影响效果(如椭圆核更适合圆形物体)。

直方图处理

52.cv2.calcHist():

功能计算图像的直方图(统计像素强度分布)。
参数1. images:输入图像列表(需用 [] 包裹)。
2. channels:统计的通道索引(如 [0] 表示灰度图,[0,1,2] 表示BGR三通道)。
3. mask(可选):掩膜图像(仅统计掩膜非零区域)。
4. histSize:直方图的区间(bin)数量(如 [256])。
5. ranges:像素值范围(如 [0,256])。
返回值直方图数据(numpy.ndarray,形状由 channels 和 histSize 决定)。

关键特性

  1. 多通道支持

    • 可同时计算多通道直方图(如BGR图像的色彩分布)。

    • 示例:channels=[0,1] 统计蓝色和绿色通道的2D直方图。

  2. 掩膜控制

    • 通过 mask 参数可限定统计区域(如只分析ROI内的像素)。

  3. 输出格式

    • 单通道返回 (histSize, 1) 的数组,多通道返回 (histSize, histSize,...) 的多维数组。

对比其他直方图工具

方法优点缺点
cv2.calcHist()支持多通道和掩膜需手动可视化
np.histogram()无需OpenCV仅支持单通道
plt.hist()直接可视化功能较简单

典型应用场景

  1. 图像增强:通过直方图均衡化调整对比度。

  2. 颜色分析:统计不同颜色通道的分布。

  3. 目标检测:利用直方图反向投影定位物体。

注意

  • 输入图像需为 uint8 或 float32 类型。

53.cv2.equalizeHist():

项目说明
功能对灰度图像进行直方图均衡化,增强对比度(拉伸像素强度分布)。
参数src:输入灰度图像(单通道,uint8 类型)。
返回值均衡化后的图像(numpy.ndarray,与输入同尺寸)。

54.cv2.createCLAHE():

功能创建对比度受限的自适应直方图均衡化(CLAHE)对象,用于局部对比度增强。
参数1. clipLimit:对比度限制阈值(默认40,建议2.0-5.0)。
2. tileGridSize:图像分块大小(如(8,8),需能整除图像尺寸)。
返回值CLAHE对象(需调用 .apply() 方法处理图像)。

关键特性

  1. 自适应原理

    • 将图像划分为小方块(tile),对每个块独立均衡化,避免全局均衡化的噪声放大问题。

    • clipLimit 控制局部直方图的裁剪强度(值越大对比度越强)。

  2. 优势场景

    • 医学影像(X光、超声)。

    • 光照不均的自然图像(如背光人脸)。

  3. 输出控制

    • 需对返回对象调用 .apply(src) 方法处理图像

参数调优建议

参数推荐值影响
clipLimit2.0~5.0值越大,局部对比度越强(但噪声可能增加)
tileGridSize(8,8)~(16,16)分块越小,局部细节保留越好(计算量越大)

55.cv2.HoughLines():

功能使用标准霍夫变换检测图像中的直线(返回极坐标参数)。
参数1. image:输入二值图像(推荐用Canny边缘检测结果)。
2. rho:距离分辨率(像素,如1)。
3. theta:角度分辨率(弧度,如π/180)。
4. threshold:投票阈值(低于此值的直线被忽略)。
5. lines(可选):输出数组。
6. srn/stn(可选):多尺度霍夫变换参数(默认0,禁用)。
返回值直线列表(np.array,形状为(N,1,2),每行存储(ρ, θ))。

参数选择:

        1. threshold:值越小,检测到的直线越多(但噪声也可能增加)。

        2. theta:通常设为 np.pi/180(1度步长)。

56.cv2.HoughLinesP():

功能使用概率霍夫变换检测图像中的直线段(返回起点和终点坐标)。
参数1. image:输入二值图像(推荐Canny边缘结果)。
2. rho:距离分辨率(像素,如1)。
3. theta:角度分辨率(弧度,如π/180)。
4. threshold:投票阈值(值越小检测越多)。
5. minLineLength(可选):线段最小长度(低于此值忽略)。
6. maxLineGap(可选):线段最大间断距离(超过此值视为两条线)。
返回值线段列表(np.array,形状为(N,1,4),每行存储[x1,y1,x2,y2])。

关键特性

  1. 效率优化

    • 相比 cv2.HoughLines(),概率霍夫变换直接返回线段端点,省去极坐标转换步骤。

  2. 参数控制

    • minLineLength:过滤短线段(如设为50,忽略长度<50像素的线段)。

    • maxLineGap:连接间断线段(如设为10,间断<10像素的线段合并)。

  3. 适用场景

    • 更适合检测断裂的线段(如虚线车道线)。

    • 对噪声敏感度低于标准霍夫变换。

57.cv2.HoughCircles():

功能使用霍夫变换检测图像中的圆形(返回圆心坐标和半径)。
参数1. image:输入灰度图像(建议先模糊去噪)。
2. method:检测方法(仅支持 cv2.HOUGH_GRADIENT)。
3. dp:累加器分辨率与图像分辨率的反比(通常1.0)。
4. minDist:最小圆心间距(过小会合并邻近圆)。
5. param1:Canny边缘检测的高阈值(低阈值为 param1/2)。
6. param2:圆心累加器阈值(值越小检测越多,噪声也越多)。
7. minRadius(可选):最小圆半径(默认0)。
8. maxRadius(可选):最大圆半径(默认0,无限制)。
返回值检测到的圆形列表(np.array,形状为 (N,1,3),每行存储 [x,y,半径])。

关键特性

  1. 预处理要求

    • 输入图像需为灰度图,建议先使用高斯模糊(如 cv2.GaussianBlur())减少噪声干扰。

  2. 参数敏感

    • param2 是关键阈值:

      • 值过大可能漏检,值过小会检测到假圆。

      • 典型范围:20~100(根据图像复杂度调整)。

  3. 性能优化

    • 限制 minRadius 和 maxRadius 可显著减少计算量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词