文章目录
- 棋盘格角点检测findChessboardCorners()
- 亚像素角点检测cornerSubPix()
- 棋盘格角点的绘制drawChessboardCorners()
- 计算外参solvePnPRansac()
- 旋转向量转旋转矩阵Rodrigues()
- 鱼眼畸变矫正initUndistortRectifyMap()
- 检测轮廓findContours()
- 轮廓显示drawContours()
- 改变图片大小resize
- 图片颜色空间转换
- 图像二值化threshold()
- 计算轮廓周长
- 多边拟合函数
- 图像的矩moments()
- 关键点KeyPoints
- 多边形绘制polylines()
- 绘制填充多边形fillPoly()
- 漫水算法
- 翻转filp()
棋盘格角点检测findChessboardCorners()
findChessboardCorners(image,patternSize,corners,flags = None),此函数试图确定输入图片是否有棋盘图案,并定位棋盘板上的内角点。如果所有的角点被找到且以一定的顺序排列(一行接一行,从一行的左边到右边),该函数会返回一个非零值。另外,如果该函数没有找到所有的角点或者重新排列他们,则返回0。
亚像素角点检测cornerSubPix()
cv::goodFeaturesToTrack()提取到的角点只能达到像素级别,在很多情况下并不能满足实际的需求,这时,我们则需要使用cv::cornerSubPix()对检测到的角点作进一步的优化计算,可使角点的精度达到亚像素级别。
void cv::cornerSubPix( cv::InputArray image, // 输入图像
cv::InputOutputArray corners, // 角点(既作为输入也作为输出)
cv::Size winSize, // 区域大小为 NXN; N=(winSize*2+1)
cv::Size zeroZone, // 类似于winSize,但是总具有较小的范围,Size(-1,-1)表示忽略
cv::TermCriteria criteria // 停止优化的标准
);
第五个参数用于表示计算亚像素时停止迭代的标准,可选的值有cv::TermCriteria::MAX_ITER 、cv::TermCriteria::EPS(可以是两者其一,或两者均选),前者表示迭代次数达到了最大次数时停止,后者表示角点位置变化的最小值已经达到最小时停止迭代。二者均使用cv::TermCriteria()构造函数进行指定。
棋盘格角点的绘制drawChessboardCorners()
void cv::drawChessboardCorners( cv::InputOutputArray image, // 棋盘格图像(8UC3)即是输入也是输出
cv::Size patternSize, // 棋盘格内部角点的行、列数
cv::InputArray corners, // findChessboardCorners()输出的角点
bool patternWasFound // findChessboardCorners()的返回值
);
计算外参solvePnPRansac()
bool cv::solvePnPRansac ( InputArray objectPoints, //参考点在世界坐标系
InputArray imagePoints, //参考点在相机平面的坐标
InputArray cameraMatrix, //相机内参
InputArray distCoeffs, //相机畸变系数
OutputArray rvec, // 旋转矩阵
OutputArray tvec, // 平移向量
bool useExtrinsicGuess = false,
int iterationsCount = 100,
float reprojectionError = 8.0,
double confidence = 0.99,
OutputArray inliers = noArray(),
int flags = SOLVEPNP_ITERATIVE
)
旋转向量转旋转矩阵Rodrigues()
Rodrigues(src[, dst[, jacobian]]) -> dst, jacobian
输入src:旋转向量((3,1)或者(1,3))或者旋转矩阵(3,3);
输出dst:旋转矩阵(3,3)或者旋转向量((3,1)或者(1,3));
输出jacobin:可选项,输出雅克比矩阵(3x9或者9x3),输入数组对输出数组的偏导数。
鱼眼畸变矫正initUndistortRectifyMap()
的作用是根据无畸变图的像素位置(i, j),推出它对应的畸变图中的像素位置(u, v),然后把畸变图中的(u, v)复制到新图中的(i, j),就得到了矫正图像。
void initUndistortRectifyMap( InputArray cameraMatrix, InputArray distCoeffs,InputArray R, InputArray newCameraMatrix, Size size,