常用的100个opencv函数

发布于:2025-07-18 ⋅ 阅读:(11) ⋅ 点赞:(0)

以下是OpenCV中最常用的100个函数及其作用与注意事项的全面整理,按功能模块分类,结合官方文档与工业实践优化排序。各函数均标注Python(cv2)和C++(cv::)命名,重点参数以加粗突出:


📷 ​一、图像输入/输出(8个)​

函数名​ (Python/C++) 作用 注意事项
cv2.imread/cv::imread 读取图像文件 参数flagscv2.IMREAD_GRAYSCALE(灰度)、cv2.IMREAD_COLOR(彩色)
cv2.imshow/cv::imshow 显示图像窗口 需搭配cv2.waitKey()使用,否则窗口瞬间关闭
cv2.imwrite/cv::imwrite 保存图像到文件 参数params控制格式:如cv2.IMWRITE_JPEG_QUALITY设置JPEG质量(0-100)
cv2.waitKey/cv::waitKey 等待键盘输入 参数delay=0表示无限等待,返回按键ASCII值
cv2.destroyAllWindows/cv::destroyAllWindows 关闭所有窗口 需在程序结束前调用,避免内存泄漏
cv2.VideoCapture/cv::VideoCapture 打开摄像头/视频文件 .isOpened()检查是否成功打开,.read()逐帧读取
cv2.VideoWriter/cv::VideoWriter 保存视频文件 需指定编码器(如cv2.VideoWriter_fourcc('M','J','P','G'))和帧率
cv2.namedWindow/cv::namedWindow 创建可调整的窗口 支持cv2.WINDOW_NORMAL实现窗口大小调整

🎨 ​二、图像处理与变换(25个)​

函数名​ (Python/C++) 作用 注意事项
cv2.cvtColor/cv::cvtColor 颜色空间转换 常用:cv2.COLOR_BGR2GRAY(BGR→灰度)、cv2.COLOR_BGR2HSV
cv2.resize/cv::resize 调整图像尺寸 插值方法:cv2.INTER_LINEAR(平衡速度质量)、cv2.INTER_NEAREST(最快)
cv2.flip/cv::flip 图像翻转 参数flipCode=0垂直翻转,=1水平翻转
cv2.rotate/cv::rotate 旋转图像(90°倍数) 实际由cv2.getRotationMatrix2D+warpAffine实现
cv2.warpAffine/cv::warpAffine 仿射变换(平移/旋转/缩放) 需先计算变换矩阵(cv2.getRotationMatrix2D
cv2.warpPerspective/cv::warpPerspective 透视变换(矫正倾斜) 需用cv2.getPerspectiveTransform计算变换矩阵
cv2.threshold/cv::threshold 固定阈值二值化 参数thresh=127(阈值)、maxval=255(最大值)
cv2.adaptiveThreshold/cv::adaptiveThreshold 自适应阈值二值化 适合光照不均图像,常用cv2.ADAPTIVE_THRESH_GAUSSIAN_C
cv2.GaussianBlur/cv::GaussianBlur 高斯模糊降噪 核尺寸需为奇数(如(5,5)),sigmaX控制平滑强度
cv2.medianBlur/cv::medianBlur 中值滤波(去除椒盐噪声) 核尺寸为奇数(如5
cv2.bilateralFilter/cv::bilateralFilter 双边滤波(保边降噪) 参数d(邻域直径)、sigmaColor(颜色空间标准差)
cv2.erode/cv::erode 形态学腐蚀(消除小物体) 需定义结构元素(如cv2.getStructuringElement
cv2.dilate/cv::dilate 形态学膨胀(填充空洞) 同上,常与腐蚀组合使用
cv2.morphologyEx/cv::morphologyEx 高级形态学操作 支持开运算(cv2.MORPH_OPEN)、闭运算(cv2.MORPH_CLOSE
cv2.pyrUp/cv::pyrUp 图像放大(高斯金字塔上采样) 尺寸变为2倍,模糊度增加
cv2.pyrDown/cv::pyrDown 图像缩小(高斯金字塔下采样) 尺寸减半,抗混叠
cv2.filter2D/cv::filter2D 自定义卷积核滤波 需预先定义核(如锐化核[[-1,-1,-1],[-1,9,-1],[-1,-1,-1]]
cv2.sepFilter2D/cv::sepFilter2D 可分离卷积(提升速度) 将二维卷积拆分为两个一维卷积
cv2.inRange/cv::inRange 按颜色范围提取区域 常用于HSV空间(如提取绿色:lower=[35,50,50], upper=[85,255,255]
cv2.split/cv::split 分离多通道图像(如BGR→B,G,R) 返回单通道列表,需用cv2.merge合并
cv2.merge/cv::merge 合并单通道为多通道图像 输入为列表(如[b,g,r]→BGR图像)
cv2.addWeighted/cv::addWeighted 图像加权融合(透明度混合) 公式:dst = src1*alpha + src2*beta + gamma
cv2.bitwise_and/cv::bitwise_and 按位与(提取ROI) 常与掩码结合(如cv2.bitwise_and(img, img, mask=mask)
cv2.bitwise_or/cv::bitwise_or 按位或(合并区域) 用途较少,多用于二进制操作
cv2.bitwise_not/cv::bitwise_not 按位取反(图像反色) 反转所有像素值

🔍 ​三、特征检测与分析(22个)​

函数名​ (Python/C++) 作用 注意事项
cv2.Canny/cv::Canny Canny边缘检测 参数threshold1=100, threshold2=200(滞后阈值)
cv2.Sobel/cv::Sobel Sobel算子边缘检测 可指定方向(dx=1,dy=0检测垂直边缘)
cv2.Laplacian/cv::Laplacian 拉普拉斯边缘检测 对噪声敏感,需先模糊
cv2.findContours/cv::findContours 查找图像轮廓 返回轮廓列表和层级关系,模式cv2.RETR_EXTERNAL(仅外轮廓)
cv2.drawContours/cv::drawContours 绘制轮廓 参数contourIdx=-1绘制所有轮廓
cv2.contourArea/cv::contourArea 计算轮廓面积 输入单个轮廓点集
cv2.arcLength/cv::arcLength 计算轮廓周长 参数closed=True表示闭合轮廓
cv2.boundingRect/cv::boundingRect 计算轮廓外接矩形 返回(x,y,w,h)
cv2.minAreaRect/cv::minAreaRect 计算最小外接旋转矩形 返回中心点、尺寸、旋转角度
cv2.minEnclosingCircle/cv::minEnclosingCircle 计算最小外接圆 返回圆心和半径
cv2.HoughLines/cv::HoughLines 霍夫变换检测直线 返回极坐标参数(ρ,θ)
cv2.HoughLinesP/cv::HoughLinesP 概率霍夫变换检测线段 返回线段端点(x1,y1,x2,y2)
cv2.HoughCircles/cv::HoughCircles 霍夫变换检测圆 参数minDist(圆间最小距离)避免重复检测
cv2.matchTemplate/cv::matchTemplate 模板匹配(目标搜索) 方法cv2.TM_CCOEFF_NORMED(归一化互相关)效果最佳
cv2.calcHist/cv::calcHist 计算图像直方图 用于分析亮度分布或颜色分布
cv2.equalizeHist/cv::equalizeHist 直方图均衡化(增强对比度) 仅支持单通道灰度图
cv2.goodFeaturesToTrack/cv::goodFeaturesToTrack Shi-Tomasi角点检测 替代Harris角点,参数maxCorners控制角点数
cv2.cornerHarris/cv::cornerHarris Harris角点检测 需阈值处理输出响应矩阵
cv2.SIFT_create/cv::SIFT::create SIFT特征检测器(需额外安装) OpenCV 4.6+需编译时启用OPENCV_ENABLE_NONFREE
cv2.ORB_create/cv::ORB::create ORB特征检测器(免费替代) 速度快,适合实时系统
cv2.BFMatcher/cv::BFMatcher 暴力特征匹配器 参数normType=cv2.NORM_HAMMING(二进制描述符)
cv2.FLANNBasedMatcher/cv::FlannBasedMatcher FLANN近似匹配器(大数据集更快) 需描述符为浮点类型

✏️ ​四、几何绘制与标注(15个)​

函数名​ (Python/C++) 作用 注意事项
cv2.line/cv::line 绘制直线 参数thickness控制线宽,-1表示填充
cv2.rectangle/cv::rectangle 绘制矩形框 pt1pt2为对角顶点
cv2.circle/cv::circle 绘制圆形 thickness=-1绘制实心圆
cv2.ellipse/cv::ellipse 绘制椭圆/圆弧 参数startAngle=0, endAngle=360绘制完整椭圆
cv2.putText/cv::putText 添加文字标注 字体可选cv2.FONT_HERSHEY_SIMPLEXfontScale控制大小
cv2.polylines/cv::polylines 绘制多边形 参数isClosed=True闭合多边形
cv2.fillPoly/cv::fillPoly 填充多边形区域 输入点集列表
cv2.arrowedLine/cv::arrowedLine 绘制带箭头线段 参数tipLength=0.1(箭头长度比例)
cv2.drawMarker/cv::drawMarker 绘制标记点(十字/星形等) 样式cv2.MARKER_CROSS(十字)
cv2.getTextSize/cv::getTextSize 获取文本尺寸 用于动态计算文本位置
cv2.clipLine/cv::clipLine 裁剪线段至矩形区域内 返回布尔值表示是否相交
cv2.ellipse2Poly/cv::ellipse2Poly 将椭圆离散化为点集 用于自定义绘制虚线椭圆
cv2.drawKeypoints/cv::drawKeypoints 绘制特征点(如SIFT/ORB) 参数flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS绘制方向与尺度
cv2.drawMatches/cv::drawMatches 绘制特征匹配结果 并排显示两图的匹配点对
cv2.add/cv::add 图像像素加法(饱和运算) 防止溢出:max(0, min(255, a+b))

⚙️ ​五、高级工具与工具函数(30个)​

函数名​ (Python/C++) 作用 注意事项
cv2.calibrateCamera/cv::calibrateCamera 相机标定(计算内参/畸变系数) 需多张棋盘格图片
cv2.findChessboardCorners/cv::findChessboardCorners 检测棋盘格角点 角点顺序需与patternSize一致
cv2.solvePnP/cv::solvePnP 求解物体3D位姿(PnP问题) 需已知3D-2D点对应关系
cv2.undistort/cv::undistort 图像畸变校正 依赖标定得到的相机矩阵和畸变系数
cv2.connectedComponents/cv::connectedComponents 连通域分析 返回标签图,背景=0
cv2.connectedComponentsWithStats/cv::connectedComponentsWithStats 带统计信息的连通域分析 返回各区域面积、质心等
cv2.integral/cv::integral 计算积分图(快速区域求和) 用于加速Haar特征计算
cv2.dct/cv::dct 离散余弦变换(图像压缩) 输入需为浮点型
cv2.idct/cv::idct 离散余弦逆变换 dct配套使用
cv2.dft/cv::dft 离散傅里叶变换(频域分析) 需用cv2.magnitude计算幅值谱
cv2.idft/cv::idft 离散傅里叶逆变换 恢复空域图像
cv2.magnitude/cv::magnitude 计算复数矩阵幅值 输入实部x和虚部ysqrt(x²+y²)
cv2.phase/cv::phase 计算复数矩阵相位 返回弧度制角度
cv2.normalize/cv::normalize 矩阵归一化 模式cv2.NORM_MINMAX缩放到[0,255]
cv2.minMaxLoc/cv::minMaxLoc 查找矩阵极值及位置 返回(min_val, max_val, min_loc, max_loc)
cv2.mean/cv::mean 计算均值 可搭配掩码使用
cv2.meanStdDev/cv::meanStdDev 计算均值与标准差 分析图像统计特征
cv2.countNonZero/cv::countNonZero 统计非零像素数 用于二值图前景计数
cv2.findHomography/cv::findHomography 计算单应性矩阵(图像配准) 需至少4组点对
cv2.warpPerspective/cv::warpPerspective 应用单应性变换 findHomography配合
cv2.getAffineTransform/cv::getAffineTransform 计算仿射变换矩阵 需3组点对
cv2.getPerspectiveTransform/cv::getPerspectiveTransform 计算透视变换矩阵 需4组点对
cv2.convertScaleAbs/cv::convertScaleAbs 缩放并取绝对值(增强对比度) 常用于Sobel结果可视化
cv2.log/cv::log 自然对数运算 用于频域滤波
cv2.exp/cv::exp 自然指数运算 log配套使用
cv2.patchNaNs/cv::patchNaNs 替换NaN值为指定数 处理无效浮点结果
cv2.copyMakeBorder/cv::copyMakeBorder 图像边界填充 模式cv2.BORDER_REFLECT(镜像填充)
cv2.vconcat/cv::vconcat 垂直拼接图像 所有图像宽度必须相同
cv2.hconcat/cv::hconcat 水平拼接图像 所有图像高度必须相同
cv2.merge/cv::merge 合并通道(见图像处理模块) split互为逆操作

💎 ​使用建议

  1. 性能优化​:视频处理中避免循环内重复创建Mat对象(C++)或numpy数组(Python),预分配内存可提速30%以上。
  2. 参数调试​:边缘检测(如Canny)的阈值比例推荐low:high ≈ 1:21:3;形态学操作的结构元素尺寸通常取3×35×5
  3. 兼容性注意​:cv2.findContours返回参数在OpenCV 3.4+版本中为(contours, hierarchy),旧版可能多返回一个image
  4. 深度学习整合​:OpenCV DNN模块支持加载ONNX/TensorFlow/PyTorch模型(cv2.dnn.readNet),但预处理需手动对齐(如缩放、归一化)。

完整函数文档见:OpenCV 4.7.0 Docs,实战代码参考官方示例库。


网站公告

今日签到

点亮在社区的每一天
去签到