函数内容接上文: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 )。 |
关键特性
-
腐蚀原理
-
用核扫描图像,仅当核覆盖区域全为前景时,中心像素才保留为前景,否则置为背景。
-
-
核形状影响
-
矩形核:均匀腐蚀所有边缘。
-
十字核:优先腐蚀对角线方向。
-
椭圆核:更自然的圆形收缩效果。
-
-
迭代次数
-
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 )。 |
关键特性
-
膨胀原理
-
用核扫描图像,只要核覆盖区域存在前景像素,中心像素即置为前景。
-
-
核形状影响
-
矩形核:均匀扩展所有边缘。
-
十字核:优先填充对角线方向。
-
椭圆核:更自然的圆形扩展效果。
-
-
迭代次数
-
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 | 闭运算图减原图 | 突出暗细节(背景均匀时有效) |
典型应用场景
-
开运算:去除指纹图像中的细小噪声。
-
闭运算:填充车牌字符中的断裂部分。
-
形态学梯度:提取细胞图像的边缘轮廓。
-
顶帽运算:检测光照不均匀图像中的亮区域。
注意:
-
彩色图像需分通道处理。
-
核大小和形状直接影响效果(如椭圆核更适合圆形物体)。
直方图处理
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 决定)。 |
关键特性
-
多通道支持
-
可同时计算多通道直方图(如BGR图像的色彩分布)。
-
示例:
channels=[0,1]
统计蓝色和绿色通道的2D直方图。
-
-
掩膜控制
-
通过
mask
参数可限定统计区域(如只分析ROI内的像素)。
-
-
输出格式
-
单通道返回
(histSize, 1)
的数组,多通道返回(histSize, histSize,...)
的多维数组。
-
对比其他直方图工具
方法 | 优点 | 缺点 |
---|---|---|
cv2.calcHist() | 支持多通道和掩膜 | 需手动可视化 |
np.histogram() | 无需OpenCV | 仅支持单通道 |
plt.hist() | 直接可视化 | 功能较简单 |
典型应用场景
-
图像增强:通过直方图均衡化调整对比度。
-
颜色分析:统计不同颜色通道的分布。
-
目标检测:利用直方图反向投影定位物体。
注意:
-
输入图像需为
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() 方法处理图像)。 |
关键特性
-
自适应原理
-
将图像划分为小方块(tile),对每个块独立均衡化,避免全局均衡化的噪声放大问题。
-
clipLimit
控制局部直方图的裁剪强度(值越大对比度越强)。
-
-
优势场景
-
医学影像(X光、超声)。
-
光照不均的自然图像(如背光人脸)。
-
-
输出控制
-
需对返回对象调用
.apply(src)
方法处理图像
-
参数调优建议
参数 | 推荐值 | 影响 |
---|---|---|
clipLimit | 2.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] )。 |
关键特性
-
效率优化
-
相比
cv2.HoughLines()
,概率霍夫变换直接返回线段端点,省去极坐标转换步骤。
-
-
参数控制
-
minLineLength
:过滤短线段(如设为50,忽略长度<50像素的线段)。 -
maxLineGap
:连接间断线段(如设为10,间断<10像素的线段合并)。
-
-
适用场景
-
更适合检测断裂的线段(如虚线车道线)。
-
对噪声敏感度低于标准霍夫变换。
-
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,半径] )。 |
关键特性
-
预处理要求
-
输入图像需为灰度图,建议先使用高斯模糊(如
cv2.GaussianBlur()
)减少噪声干扰。
-
-
参数敏感
-
param2
是关键阈值:-
值过大可能漏检,值过小会检测到假圆。
-
典型范围:20~100(根据图像复杂度调整)。
-
-
-
性能优化
-
限制
minRadius
和maxRadius
可显著减少计算量。
-