OpenCV4图像处理算子不完全手册-入门篇
OpenCV4图像处理算子不完全手册-进阶篇
本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正,我会持续进行完善!示例代码为C++编写,仅供参考。注意,为节省篇幅,函数中省略了参数类型和返回值,实际使用时参考opencv的接口说明即可!因版本不同而出现的接口和参数差异问题,请以具体版本为准,作者使用的opencv版本为最新版。
在应用篇中,会增加几个使用示例,如相机参数标定、SVM手写数字识别、人脸检测等,具体代码均以C++进行编写,使用Qt设计界面,环境为win10 64bit,MSVC编译,搭建环境参考。
HuoghLines(image, lines, rho, theta, threshold, srn, stn, min_theta, max_theta)
参数说明:
image 待检测图像,必须是CV_8U类型的单通道二值图像
lines 直线极坐标描述的系数,每一条直线都由直线距离坐标原点的距离r和坐标原点到直线的垂线与x轴的夹角θ表示
rho 以像素为单位的距离分辨率,即距离r离散化时的单位长度
theta 以弧度为单位的距离分辨率,即夹角θ离散化时的单位角度
threshold 累加器的阈值,大于该阈值时识别为直线
srn 默认为0
stn 默认为0
min_theta 默认为0,弧度为单位
max_theta 默认为CV_PI,即π = 3.1415926…
fitLine(points, line, distType, param, reps, aeps)//利用最小二乘法拟合出距离所有点最近的直线
参数说明:
points 待拟合的二维或三维点集
line 直线描述,二维点集描述为Vec4f类型,三维点集描述为Vec6f类型
distType M-estimator算法使用的距离类型标志
param 某些距离类型的数值参数,0自动选择最佳值
reps 坐标原点与拟合直线之间的距离精度,一般0.01
aeps 拟合直线的角度精度,一般0.01
HuoghCircles(image, circles, method, dp, minDist, param1, param2, minRadius, maxRadius)
参数说明:
image 待检测图像,必须是CV_8U类型的单通道二值图像
circles 检测结果,每个圆由3个参数描述,分别是圆心坐标和半径
method 检测圆的方法标志,仅支持HOUGH_GRADIENT
dp 离散化时的分辨率与图像分辨率的反比
minDist 检查结果中两个圆心的最小距离
param1 传递给Canny边缘检测器的两个阈值的较大值
param2 检测圆的累加器阈值,阈值越大则检测精度越高
minRadius 设置检测圆的最小半径
maxRadius 设置检测圆的最大半径
原型1:
findContours(image, contours, hierarchy, mode, method, offset = Point())
原型2:
findContours(image, contours, mode, method, offset = Point())
参数说明:
image 待检测图像,必须是CV_8U类型的单通道二值图像
contours 检测结果,由坐标点集表示
hierarchy 轮廓结构关系描述向量
mode 轮廓检测模式标志
method 轮廓逼近方法标志
offset 每个轮廓点移动的可选偏移量
drawContours(image, contours, contourIdx, color, thickness = 1, lineType = LINE_8, hierarchy = noArray(), maxLEvel = INT_MAX, offset = Point())
参数说明:
image 绘制轮廓的目标图像
contours 轮廓检测结果,由坐标点集表示
contourIdx 要绘制的轮廓数目
color 轮廓颜色
thickness 轮廓线条的粗细
lineType 边界线的连接类型
hierarchy 可选的轮廓结构关系
maxLEvel 轮廓绘制的最大等级
offset 可选的轮廓偏移
contourArea(contour, oriented = false)//oriented 区域面积是否具有方向性,默认没有
arcLength(curve, closed)//该函数可以计算轮廓周长或曲线长度,closed设置为false时则为计算曲线长度
参数说明:
curve 轮廓或曲线的二维点集
closed 是否闭合标志,闭合则curve为轮廓,不闭合则curve为曲线
boundingRect(array)//输入灰度图或二维点集,返回一个Rect类型值,该外接矩形不带角度,即长与X轴平行
minAreaRect(points)//输入二维点集,返回一个RoratedRect对象,即该外接矩形带有角度值angle
pointPolygonTest(contour, point, measureDist)
measureDist为true时,返回值为像素距离,若点在轮廓内则返回正数,点在轮廓外则返回负数;measureDist为false时,只检测点与轮廓的位置关系,若点在轮廓内则返回1,点在轮廓外则返回-1,若点在轮廓上则返回0
QRCodeDetector::detect(img, points)//points为二维码的四个点坐标;返回值为bool类型,即是否检测到
QRCodeDetector::decode(img, points, straight_qrcode = noArray())//straight_qrcode为经过校正和二值化的二维码图像;返回值为二维码信息
QRCodeDetector::detectAndDecode(img, points)//参数同QRCodeDetector::decode
findChessboardCorners(image, patternSize, corners, flags)//用于棋盘格标定板
参数说明:
image 含有棋盘格标定板的图像,必须是CV_8U类型
patternSize 棋盘格图片中内角点的行数和列数
corners 检测结果,即所有的内角点坐标集合
flags 用于检测内角点方式的标志
find4QuadCornerSubpix(image, corners, region_size)
参数说明:
image 在findChessboardCorners可以检测出内角点的图像
corners 内角点坐标
region_size 优化坐标时考虑的邻域范围
drawChessboardCorners(image, patternSize, corners, patternWasFound)
参数说明:
image 需要绘制角点的目标图像,与findChessboardCorners和find4QuadCornerSubpix相同
patternSize 棋盘格图片中内角点的行数和列数
corners 检测到的角点坐标数组
patternWasFound 绘制角点的样式
calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags, criteria)
参数说明:
objectPoints 棋盘格内角点的三维世界坐标,一般指定z = 0,左上角第一个内角点坐标为(0,0,0)
imagePoints 棋盘格内角点在图像中的像素坐标
imageSize 图像的尺寸大小
cameraMatrix 相机内参矩阵
distCoeffs 畸变系数
rvecs 相机坐标系与世界坐标系之间的旋转向量
tvecs 相机坐标系与世界坐标系之间的平移向量
flags 选择标定算法的标志
criteria 迭代的终止条件
undistort(src, dst, cameraMatrix, distCoeffs, newCameraMatrix = noArray())
参数说明:
src 含有畸变、待校正的图像
dst 校正后的图像,与src具有相同的尺寸和数据类型
cameraMatrix 相机内参矩阵
distCoeffs 相机畸变系数
newCameraMatrix 畸变图像的相机内参矩阵,一般情况下使用默认值或与cameraMatrix相同
solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvecs, tvecs, useExtrinsicGuess = false, flags = SOLVEPNP_ITERATIVE)
参数说明:
objectPoints 目标点的三维世界坐标
imagePoints 目标在图像中的像素坐标
cameraMatrix 相机内参矩阵
distCoeffs 畸变系数
rvecs 相机坐标系与世界坐标系之间的旋转向量
tvecs 相机坐标系与世界坐标系之间的平移向量
useExtrinsicGuess 是否使用旋转向量初值和平移向量初值的标志
flags 选择解算PnP问题的算法标志
//solvePnP的优化版,使用RANSAC算法,解决部分数据存在较大误差的问题
solvePnPRansac(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvecs, tvecs, useExtrinsicGuess = false, iterationCount = 100, reprojectionError = 8.0, confidence = 0.699, inlines = noArray(), flags = SOLVEPNP_ITERATIVE)
参数说明:
iterationCount 迭代的次数
reprojectionError RANSAC算法计算的重投影误差的最小值
confidence 置信度
inlines 内点的三维坐标和二维坐标
stereoCalibrate(objectPoints, imagePoints1, imagePoints2, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, R, T, E, F, flags, criteria)
参数说明:
objectPoints 棋盘格内角点的三维坐标,z = 0,一般是以棋盘格左上角第一个内角点作为(0,0,0)
imagePoints1 棋盘格内角点在第一个相机图像中的像素坐标
imagePoints2 棋盘格内角点在第二个相机图像中的像素坐标
cameraMatrix1 第一个相机的内参矩阵
distCoeffs1 第一个相机的畸变系数
cameraMatrix2 第二个相机的内参矩阵
distCoeffs2 第二个相机的畸变系数
imageSize 图像尺寸,一般要求两个相机的图像尺寸相同
R 两个相机坐标系之间的旋转矩阵
T 两个相机坐标系之间的平移向量
E 两个相机之间的本征矩阵
F 两个相机之间的基本矩阵
flags 双目标定算法的选择标志
criteria 迭代算法的终止条件
stereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, R, T, R1, R2, P1, P2, Q, flags, alpha, newImageSize, validPixROI1, validPixROI2)
参数说明: