常用的100个opencv函数
>
常用的100个opencv函数

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

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

​函数名​ (Python/C++)

​作用​

​注意事项​

cv2.imread/cv::imread

读取图像文件

参数flags:cv2.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

绘制矩形框

pt1和pt2为对角顶点

cv2.circle/cv::circle

绘制圆形

thickness=-1绘制实心圆

cv2.ellipse/cv::ellipse

绘制椭圆/圆弧

参数startAngle=0, endAngle=360绘制完整椭圆

cv2.putText/cv::putText

添加文字标注

字体可选cv2.FONT_HERSHEY_SIMPLEX,fontScale控制大小

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和虚部y:sqrt(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互为逆操作

💎 ​使用建议​

性能优化 :视频处理中避免循环内重复创建Mat对象(C++)或numpy数组(Python),预分配内存可提速30%以上。

参数调试 :边缘检测(如Canny)的阈值比例推荐low:high ≈ 1:2或1:3;形态学操作的结构元素尺寸通常取3×3或5×5。

兼容性注意 :cv2.findContours返回参数在OpenCV 3.4+版本中为(contours, hierarchy),旧版可能多返回一个image。

深度学习整合 :OpenCV DNN模块支持加载ONNX/TensorFlow/PyTorch模型(cv2.dnn.readNet),但预处理需手动对齐(如缩放、归一化)。

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

Shopping Cart