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)。 |
关键特性
-
腐蚀原理
-
用核扫描图像,仅当核覆盖区域全为前景时,中心像素才保留为前景,否则置为背景。
-
-
核形状影响
-
矩形核:均匀腐蚀所有边缘。
-
十字核:优先腐蚀对角线方向。
-
椭圆核:更自然的圆形收缩效果。
-
-
迭代次数
-
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可显著减少计算量。
-
