六安电商网站建设价格,cms建站方案,怎么做批量的网站检查,北京建设部网站官网文章目录 棋盘格角点检测findChessboardCorners()亚像素角点检测cornerSubPix(#xff09;棋盘格角点的绘制drawChessboardCorners()计算外参solvePnPRansac()旋转向量转旋转矩阵Rodrigues()鱼眼畸变矫正initUndistortRectifyMap()检测轮廓findContours()轮廓显示drawContours… 文章目录 棋盘格角点检测findChessboardCorners()亚像素角点检测cornerSubPix(棋盘格角点的绘制drawChessboardCorners()计算外参solvePnPRansac()旋转向量转旋转矩阵Rodrigues()鱼眼畸变矫正initUndistortRectifyMap()检测轮廓findContours()轮廓显示drawContours()改变图片大小resize图片颜色空间转换图像二值化threshold()计算轮廓周长多边拟合函数图像的矩moments()关键点KeyPoints多边形绘制polylines()绘制填充多边形fillPoly() 棋盘格角点检测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*21)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, int m1type, OutputArray map1, OutputArray map2 );参数说明 cameraMatrix——输入的摄像头内参数矩阵3X3矩阵 distCoeffs——输入的摄像头畸变系数矩阵5X1矩阵 R——矫正单目鱼眼相机时R默认为单位矩阵 newCameraMatrix——输入的校正后的3X3摄像机矩阵 size——摄像头采集的无失真图像尺寸 m1type——map1的数据类型可以是CV_32FC1或CV_16SC2 map1——输出的X坐标重映射参数 map2——输出的Y坐标重映射参数
检测轮廓findContours()
findContours( InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offsetPoint()); image是单通道图像矩阵可以是灰度图更常用的是二值图像一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像。
contours的定义是vectorvector point contours;向量内每个元素保存了一组由连续的点构成的点的集合向量每一组point点集就是一个轮廓。
hierarchy定义为“vector Vec4i hierarchy”向量hiararchy内的元素和轮廓向量contours内的元素是一一对应的向量的容量相同。hierarchy向量内每一个元素的4个int型变量——hierarchy[i][0] ~hierarchy[i][3]分别表示第i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果当前轮廓没有对应的后一个轮廓、前一个轮廓、父轮廓或内嵌轮廓的话则hierarchy[i][0] ~hierarchy[i][3]的相应位被设置为默认值-1。
int型的mode定义轮廓的检索模式int型的method定义轮廓的近似方法第六个参数Point偏移量所有的轮廓信息相对于原始图像对应点的偏移量相当于在每一个检测出的轮廓点上加上该偏移量并且Point还可以是负值。
// 用于保存轮廓点的坐标
vectorvectorPoint contours;vectorPoint point;
// 存放点集间的关系
vectorVec4i hireachy;// 利用二值图寻找轮廓
cv::findContours(binary, contours, hireachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());轮廓显示drawContours()
cv2.drawContours() cv2.drawContours(image, contours, contourIdx, color, thicknessNone, lineTypeNone, hierarchyNone, maxLevelNone, offsetNone) 第一个参数是指明在哪幅图像上绘制轮廓image为三通道才能显示轮廓 第二个参数是轮廓本身在Python中是一个list; 第三个参数指定绘制轮廓list中的哪条轮廓如果是-1则绘制其中的所有轮廓。后面的参数很简单。其中thickness表明轮廓线的宽度如果是-1cv2.FILLED则为填充模式。
改变图片大小resize
void cv::resize (InputArray src,
OutputArray dst,
Size dsize,
double fx 0,
double fy 0,
int interpolation INTER_LINEAR
)src - 输入图像。 dst - 输出图像它的大小为 dsize当它非零时或从 src.size()、fx 和 fy 计算的大小dst 的类型与 src 的类型相同。 dsize - 输出图像大小如果它等于零则计算为dsize Size(round(fxsrc.cols), round(fysrc.rows))。dsize 或 fx 和 fy 必须为非零。 fx - 沿水平轴的比例因子当它等于 0 时它被计算为(double)dsize.width/src.cols fy - 沿垂直轴的比例因子当它等于 0 时它被计算为(double)dsize.height/src.rows 插值 - 插值方法请参阅 InterpolationFlags
resize(img, img, Size(642, 362));图片颜色空间转换
cv::cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换目前常见的颜色空间均支持并且在转换的过程中能够保证数据的类型不变即转换后的图像的数据类型和位深与源图像一致。具体调用形式如下
void cv::cvtColor(cv::InputArray src, // 输入序列cv::OutputArray dst, // 输出序列int code, // 颜色映射码int dstCn 0 // 输出的通道数 (0automatic)
);//具体例子
cvtColor(image, image, COLOR_RGB2GRAY);图像二值化threshold()
图像的二值化就是将图像上的像素点的灰度值设置为0或255这样将使整个图像呈现出明显的黑白效果。在数字图像处理中二值图像占有非常重要的地位图像的二值化使图像中数据量大为减少从而能凸显出目标的轮廓。OpenCV中提供了函数cv::threshold();
double cv::threshold(InputArray src, OutputArray dst, double thres, double maxval, int type)src源图像可以为8位的灰度图也可以为32位的彩色图像 dst输出图像 thresh阈值 maxval二值图像中灰度最大值 type阈值操作类型具体的阈值操作实现如下图所示
计算轮廓周长
double arcLength( InputArray curve, bool closed );参数说明 InputArray类型的curve输入的向量二维点轮廓顶点可以为std::vector或Mat类型。 bool类型的closed用于指示曲线是否封闭的标识符一般设置为true。
多边拟合函数
approxPolyDP 主要功能是把一个连续光滑曲线折线化对图像轮廓点进行多边形拟合。
void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed)参数详解; InputArray curve:一般是由图像的轮廓点组成的点集 OutputArray approxCurve表示输出的多边形点集 double epsilon主要表示输出的精度就是另个轮廓点之间最大距离数5,6,78, bool closed表示输出的多边形是否封闭
图像的矩moments()
从图像中计算出来的矩通常描述了图像不同种类的几何特征如大小、灰度、方向、形状等图像矩广泛应用于模式识别、目标分类、目标识别与防伪估计、图像编码与重构等领域。moments()函数计算多边形或栅格化形状一个矢量形状或光栅形状的最高达三阶所有矩。
Moments cv::moments(
InputArray array, // 光栅图像(单通道、8位或浮点二维数组)或二维点(点或点2f)的数组(1×N或N×1)
bool binaryImage false // binaryImage用来指示输出图像是否为一幅二值图像如果是二值图像则图像中所有非0像素看作为1进行计算。
)
结构Moments成员数据
cv::Moments::Moments
(
// 空间矩(10个)
double m00,double m10,double m01,double m20,double m11,double m02,double m30,double m21,double m12,double m03
// 中心矩7个
double mu20, double mu11, double mu02, double mu30, double mu21 , double mu12,double mu03
// 中心归一化矩
double nu20, double nu11, double nu02, double nu30, double nu21, double nu12,double nu03;
) 关键点KeyPoints
corners包含大量本地信息的像素块并能够在另一张图中被快速识别 **keypoints**作为 corners 的扩展它将像素块的信息进行编码从而使得更易辨识至少在原则上唯一 descriptors它是对 keypoints 进一步处理的结果。通常它具有更低的维度从而使得图像块能够在另一幅不同的图像中被更快地识别。
class cv::KeyPoint {
public:cv::Point2f pt; // coordinates of the keypointfloat size; // diameter of the meaningful keypoint neighborhoodfloat angle; // computed orientation of the keypoint (-1 if none)float response; // response for which the keypoints was selectedint octave; // octave (pyramid layer) keypoint was extracted fromint class_id; // object id, can be used to cluster keypoints by object 标示关键点来自哪一个目标cv::KeyPoint(cv::Point2f _pt,float _size,float _angle -1,float _response 0,int _octave 0,int _class_id -1);cv::KeyPoint(float x,float y,float _size,float _angle -1,float _response 0,int _octave 0,int _class_id -1);...
};多边形绘制polylines()
void cv::polylines(InputOutputArray img,InputArrayOfArrays pts,bool isClosed,const Scalar color,int thickness 1,int lineType LINE_8,int shift 0
)img表示绘制画布图像 pts表示多边形的点 isClosed表示是否闭合默认闭合 color表示颜色 thickness表示线宽必须是正数 lineType表示线渲染类型 shift表示相对位移
绘制填充多边形fillPoly()
void fillPoly(Mat img, const Point** pts, const int* npts, int ncontours, const Scalar color, int lineType8, int shift0,
Point offsetPoint() );img在img表示的图像上绘制 pts是指向多边形数组的指针必须是const修饰的 npts是多边形顶点个数的数组名 ncontours是绘制多边形的个数 color是填充的颜色