OpenCV:norm-范数求解函数( 二 )


1-范数:║x║1=│x1│+│x2│+…+│xn│//标的目的量中的绝对值乞降
2-范数:║x║2=(│x1│2+│x2│2+…+│xn│2)^1/2  //欧几里得距离
∞-范数:║x║∞=max(│x1│,│x2│, … ,│xn│)  //标的目的量中的max

OpenCV:norm-范数求解函数



4OpenCV:norm范数求解函数
三种格局:
①double norm(InputArray src1,
int normType=NORM_L2,
InputArray mask=noArray() )
②double norm(InputArray src1,
InputArray src2,
int normType=NORM_L2,
InputArray mask=noArray())
③double norm(const SparseMat& src, int normType)

OpenCV:norm-范数求解函数



5应用实例:用于评估相机标定的表里参质量
法式如下:
cout << "每幅图像的标定误差:" << l; 
for (int i = 0; i<image_count; i++) 

    vector<Point3f> tempPointSet = object_Points[i];
    /*object_Points是图像棋盘格角点宿世界坐标的容器 , 其是三通道的XYZ , 此中Z通道为0 。 棋盘格以左上角为原点 , 方块大小是12mm和12mm*/ 
/*依据摄像机表里参数 , 对空间的三维点进行重投影计较;
tempPointSet为12mm*12mm的棋盘格标定板角点宿世界坐标 ,
image_points2是重投影后的图像像素角点坐标*/
projectPoints(tempPointSet,
rotation_vectors[i],
translation_vectors[i],
intrinsic_matrix,
distortion_coeffs,
image_points2);
     
/*图像亚像素角点坐标tempImagePoint */ 
/*image_points2和tempImagePoint进行误差计较 , 评估出其表里参的质量*/
    vector<Point2f> tempImagePoint = corners_Seq[i]; 
   
//界说双通道的Mat矩阵 , 每个点暗示两个数据 , 别离为棋盘格角点的x和y// 
    Mat tempImagePointMat = Mat(1, tempImagePoint.size(), CV_32FC2);  
    Mat image_points2Mat = Mat(1, image_points2.size(), CV_32FC2);   
    for (int j = 0; j < tempImagePoint.size(); j++) 
    { 
        image_points2Mat.at<Vec2f>(0, j) = Vec2f(image_points2[j].x, image_points2[j].y);  //两个通道赋值
        tempImagePointMat.at<Vec2f>(0, j) = Vec2f(tempImagePoint[j].x, tempImagePoint[j].y); 
    } 
    err = norm(image_points2Mat, tempImagePointMat, NORM_L2);//2范数 
    total_err += err /= point_counts[i]; 
    cout << "第" << i + 1 << "幅图像的平均误差:" << err << "像素" << l; 

cout << "总体平均误差:" << total_err / image_count << "像素" << l; 
cout << "评价完当作!" << l; 
【注】:OpenCV的norm函数是将两个通道分隔计较(X1-X2)^2的值 , 然后同一乞降 , 开根号;即2范数;

OpenCV:norm-范数求解函数



OpenCV:norm-范数求解函数

猜你喜欢