OpenCV4图像处理算子不完全手册-应用篇

目录

  • 导航
  • 说明
  • 正文
    • 七、目标检测
      • 1、形状检测
        • 霍夫-直线检测
        • 直线拟合
        • 霍夫-圆检测
      • 2、轮廓检测
        • 轮廓检测
        • 轮廓绘制
        • 轮廓面积
        • 轮廓周长
        • 轮廓外接矩形
        • 轮廓最小外接矩形
        • 点到轮廓的距离
      • 3、二维码
        • 检测
        • 解码
        • 检测&解码
    • 八、立体视觉
      • 1、单目视觉
        • 棋盘格内角点检测
        • 计算亚像素角点
        • 绘制内角点
        • 单目相机标定(相机内参与图像畸变系数)
        • 图像畸变校正
        • 位姿估计(相机外参)
      • 2、双目视觉
        • 双目立体标定
        • 双目校正
    • 九、机器学习

导航

OpenCV4图像处理算子不完全手册-入门篇
OpenCV4图像处理算子不完全手册-进阶篇

说明

本文主要是记录我在学习和使用OpenCV4过程中对常用算子的记录和简单描述,如描述有误请留言指正,我会持续进行完善!示例代码为C++编写,仅供参考。注意,为节省篇幅,函数中省略了参数类型和返回值,实际使用时参考opencv的接口说明即可!因版本不同而出现的接口和参数差异问题,请以具体版本为准,作者使用的opencv版本为最新版。
在应用篇中,会增加几个使用示例,如相机参数标定、SVM手写数字识别、人脸检测等,具体代码均以C++进行编写,使用Qt设计界面,环境为win10 64bit,MSVC编译,搭建环境参考。

正文

七、目标检测

1、形状检测

霍夫-直线检测

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 设置检测圆的最大半径

2、轮廓检测

轮廓检测

原型1findContours(image, contours, hierarchy, mode, method, offset = Point())
原型2findContours(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

3、二维码

检测

QRCodeDetector::detect(img, points)//points为二维码的四个点坐标;返回值为bool类型,即是否检测到

解码

QRCodeDetector::decode(img, points, straight_qrcode = noArray())//straight_qrcode为经过校正和二值化的二维码图像;返回值为二维码信息

检测&解码

QRCodeDetector::detectAndDecode(img, points)//参数同QRCodeDetector::decode

八、立体视觉

1、单目视觉

棋盘格内角点检测

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 内点的三维坐标和二维坐标

2、双目视觉

双目立体标定

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)

参数说明:

九、机器学习

你可能感兴趣的:(OpenCV4,opencv,c++,qt,图像识别,图像处理)