201:Squares

Squares


version 1(20ms):

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10;
int n,m,c,H[maxn][maxn],V[maxn][maxn];
char readchar(){
    for(;;){
        c = getchar();
        if(c != '\n' && c != '\r') return c;
    }
}
int countsq(int len){
    int cnt = 0;
    for(int i = 1;i+len <= n;i++){
        for(int j = 1;j+len <= n;j++){
            int mark = 1;
            for(int k = 0;mark && k <= len - 1;k++){
                if(!H[i][j+k] || !V[i+k][j]) mark = 0;//从左上角的点分别往右边和下边看
                if(!H[i+len][j+k]) mark = 0;//从左下角的点往右边看
                if(!V[i+k][j+len]) mark = 0;//从右上角的点往下边看
            }
            if(mark) cnt++;
        }
    }
    return cnt;
}
int main(){
    int kase = 0;
    while(scanf("%d%d",&n,&m) == 2){
        memset(H,0,sizeof(H));
        memset(V,0,sizeof(V));
        int a,b;
        while(m--){
            c = readchar();
            scanf("%d %d",&a,&b);
            if(c == 'H') H[a][b]= 1;
            if(c == 'V') V[b][a]= 1;//这个地方注意书上说的是不对的 是 b a
        }
        if(++kase > 1) printf("\n**********************************\n\n");
        printf("Problem #%d\n\n",kase);
        int mark = 0;
        for(int i = 1;i <= n;i++){
            a = countsq(i);
            if(a){
                mark = 1;
                printf("%d square (s) of size %d\n",a,i);
            }
        }
        if(!mark) printf("No completed squares can be found.\n");
    }
    return 0;
}

又想了下,如果以某点为左上顶点不存在较短的正方形,那么也应该不存在更大的正方形,所以可以把这些点存储一下,以后根本不用去检查。

version 2:

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10;
int n,m,c,H[maxn][maxn],V[maxn][maxn],record[maxn][maxn];
char readchar(){
    for(;;){
        c = getchar();
        if(c != '\n' && c != '\r') return c;
    }
}
int countsq(int len){
    int cnt = 0;
    for(int i = 1;i+len <= n;i++){
        for(int j = 1;j+len <= n;j++){
            if(record[i][j]) continue;
            int mark = 1;
            for(int k = 0;mark && k <= len - 1;k++){
                if(!H[i][j+k] || !V[i+k][j]) mark = 0;//从左上角的点分别往右边和下边看
                if(!H[i+len][j+k]) mark = 0;//从左下角的点往右边看
                if(!V[i+k][j+len]) mark = 0;//从右上角的点往下边看
            }
            if(mark) cnt++;
            else record[i][j] = 1;
        }
    }
    return cnt;
}
int main(){
    int kase = 0;
    while(scanf("%d%d",&n,&m) == 2){
        memset(H,0,sizeof(H));
        memset(V,0,sizeof(V));
        memset(record,0,sizeof(record));
        int a,b;
        while(m--){
            c = readchar();
            scanf("%d %d",&a,&b);
            if(c == 'H') H[a][b]= 1;
            if(c == 'V') V[b][a]= 1;
        }
        if(++kase > 1) printf("\n**********************************\n\n");
        printf("Problem #%d\n\n",kase);
        int mark = 0;
        for(int i = 1;i <= n;i++){
            a = countsq(i);
            if(a){
                mark = 1;
                printf("%d square (s) of size %d\n",a,i);
            }
        }
        if(!mark) printf("No completed squares can be found.\n");
    }
    return 0;
}

但是 WA 了。。。仔细一想其实不对,如下图:


虽然这个点不存在边长为1的正方形,但是有边长为2的正方形,所以上面减少时间复杂度的做法行不通。但是如果这点的右边和下边这条线断掉的话,肯定不存在更大的正方形,以后是不需要检查的。

version 3(30ms):

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 10;
int n,m,c,H[maxn][maxn],V[maxn][maxn],record[maxn][maxn];
char readchar(){
    for(;;){
        c = getchar();
        if(c != '\n' && c != '\r') return c;
    }
}
int countsq(int len){
    int cnt = 0;
    for(int i = 1;i+len <= n;i++){
        for(int j = 1;j+len <= n;j++){
            if(record[i][j]) continue;
            int mark = 1,mark2 = 0;
            for(int k = 0;mark && k <= len - 1;k++){
                if(!H[i][j+k] || !V[i+k][j]) {mark = 0,mark2 = 1;}//从左上角的点分别往右边和下边看
                if(!H[i+len][j+k]) mark = 0;//从左下角的点往右边看
                if(!V[i+k][j+len]) mark = 0;//从右上角的点往下边看
            }
            if(mark) cnt++;
            if(mark2) record[i][j] = 1;
        }
    }
    return cnt;
}
int main(){
    int kase = 0;
    while(scanf("%d%d",&n,&m) == 2){
        memset(H,0,sizeof(H));
        memset(V,0,sizeof(V));
        memset(record,0,sizeof(record));
        int a,b;
        while(m--){
            c = readchar();
            scanf("%d %d",&a,&b);
            if(c == 'H') H[a][b]= 1;
            if(c == 'V') V[b][a]= 1;
        }
        if(++kase > 1) printf("\n**********************************\n\n");
        printf("Problem #%d\n\n",kase);
        int mark = 0;
        for(int i = 1;i <= n;i++){
            a = countsq(i);
            if(a){
                mark = 1;
                printf("%d square (s) of size %d\n",a,i);
            }
        }
        if(!mark) printf("No completed squares can be found.\n");
    }
    return 0;
}

这次总算AC了,但是没想到时间竟然是30ms,可能减少的时间还没有增加两个判断语句增加的时间多。。。

D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 20687 (\N{CJK UNIFIED IDEOGRAPH-50CF}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 32032 (\N{CJK UNIFIED IDEOGRAPH-7D20}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 22352 (\N{CJK UNIFIED IDEOGRAPH-5750}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 26631 (\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 22270 (\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 28857 (\N{CJK UNIFIED IDEOGRAPH-70B9}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 19982 (\N{CJK UNIFIED IDEOGRAPH-4E0E}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 25237 (\N{CJK UNIFIED IDEOGRAPH-6295}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 24433 (\N{CJK UNIFIED IDEOGRAPH-5F71}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 23545 (\N{CJK UNIFIED IDEOGRAPH-5BF9}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 27604 (\N{CJK UNIFIED IDEOGRAPH-6BD4}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 23454 (\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 38469 (\N{CJK UNIFIED IDEOGRAPH-9645}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 35823 (\N{CJK UNIFIED IDEOGRAPH-8BEF}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 24046 (\N{CJK UNIFIED IDEOGRAPH-5DEE}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 25968 (\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 37325 (\N{CJK UNIFIED IDEOGRAPH-91CD}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 20998 (\N{CJK UNIFIED IDEOGRAPH-5206}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 24067 (\N{CJK UNIFIED IDEOGRAPH-5E03}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:201: UserWarning: Glyph 22343 (\N{CJK UNIFIED IDEOGRAPH-5747}) missing from font(s) DejaVu Sans. plt.tight_layout() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 20687 (\N{CJK UNIFIED IDEOGRAPH-50CF}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 32032 (\N{CJK UNIFIED IDEOGRAPH-7D20}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 22352 (\N{CJK UNIFIED IDEOGRAPH-5750}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 26631 (\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 22270 (\N{CJK UNIFIED IDEOGRAPH-56FE}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 28857 (\N{CJK UNIFIED IDEOGRAPH-70B9}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 19982 (\N{CJK UNIFIED IDEOGRAPH-4E0E}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 25237 (\N{CJK UNIFIED IDEOGRAPH-6295}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 24433 (\N{CJK UNIFIED IDEOGRAPH-5F71}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 23545 (\N{CJK UNIFIED IDEOGRAPH-5BF9}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 27604 (\N{CJK UNIFIED IDEOGRAPH-6BD4}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 23454 (\N{CJK UNIFIED IDEOGRAPH-5B9E}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 38469 (\N{CJK UNIFIED IDEOGRAPH-9645}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 25968 (\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 37325 (\N{CJK UNIFIED IDEOGRAPH-91CD}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 35823 (\N{CJK UNIFIED IDEOGRAPH-8BEF}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 24046 (\N{CJK UNIFIED IDEOGRAPH-5DEE}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 20998 (\N{CJK UNIFIED IDEOGRAPH-5206}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 24067 (\N{CJK UNIFIED IDEOGRAPH-5E03}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from font(s) DejaVu Sans. plt.show() D:\水位检测\标定\PNP.py:202: UserWarning: Glyph 22343 (\N{CJK UNIFIED IDEOGRAPH-5747}) missing from font(s) DejaVu Sans. plt.show()
最新发布
07-26
import numpy as np import cv2 from scipy.optimize import least_squares # 输入参数 # 1. 世界坐标点 (3D点) world_points = np.array([ [4262845.751, 644463.054, 63.939], [4262844.149, 644468.755, 63.351], [4262846.106, 644470.001, 63.271], [4262847.099, 644471.268, 63.415], [4262844.678, 644473.34, 63.263], [4262838.693, 644473.677, 63.215], [4262833.235, 644478.754, 63.372], [4262838.601, 644477.972, 63.281], [4262853.252, 644455.049, 63.827], [4262851.546, 644451.282, 64.525], [4262837.259, 644438.863, 66.975], [4262841.986, 644437.241, 65.401], [4262846.305, 644431.715, 66.07], [4262851.769, 644434.948, 64.153], [4262852.526, 644431.694, 64.434], [4262850.889, 644423.337, 67.69], [4262858.526, 644426.641, 64.46], [4262860.791, 644431.732, 63.503], [4262865.608, 644419.362, 65.658], [4262865.978, 644423.624, 64.35], [4262857.58, 644470.911, 63.286], [4262854.209, 644478.653, 63.279], [4262858.634, 644475.401, 63.29] ], dtype=np.float64) # 2. 图像坐标点 (2D点) image_points = np.array([ [1058, 614], [855, 680], [901, 711], [913, 726], [727, 739], [480, 689], [140, 694], [295, 736], [1452, 599], [1422, 545], [1439, 421], [1269, 467], [1401, 447], [1515, 513], [1542, 497], [1534, 409], [1677, 494], [1729, 533], [1819, 471], [1828, 506], [1532, 816], [1100, 983], [1557, 940] ], dtype=np.float64) # 3. 相机内参矩阵 (已知) camera_matrix = np.array([ [1883.707684, 0, 998.0551015], [0, 1931.066609, 479.5179864], [0, 0, 1] ], dtype=np.float64) # 4. 畸变系数 (已知) dist_coeffs = np.array([-0.923619555, 0.976179712, 0.007221199 ,-0.006101453,0], dtype=np.float64) # 改进的数值稳定性处理 # ====================================================== # 1. 使用更小的缩放因子 scale_factor = 0.0001 # 缩放因子从0.001改为0.0001 world_points_scaled = world_points * scale_factor # 2. 坐标中心化 world_mean = np.mean(world_points_scaled, axis=0) world_points_centered = world_points_scaled - world_mean # ====================================================== # 使用solvePnP获取初始外参估计 success, rvec_init, tvec_init = cv2.solvePnP( world_points_centered, # 使用中心化坐标 image_points, camera_matrix, dist_coeffs, flags=cv2.SOLVEPNP_ITERATIVE ) if not success: raise RuntimeError("初始solvePnP失败") # 归一化旋转向量:将旋转角度限制在[-π, π]范围内 # ====================================================== def normalize_rotation_vector(rvec): """将旋转向量归一化到[-π, π]范围内""" # 转换为旋转矩阵 R, _ = cv2.Rodrigues(rvec) # 计算旋转角度 angle = np.linalg.norm(rvec) # 如果角度大于π,转换为等效的小角度表示 if angle > np.pi: # 计算等效旋转角度 equiv_angle = angle - 2 * np.pi * np.floor((angle + np.pi) / (2 * np.pi)) # 计算旋转轴 axis = rvec / angle # 计算等效旋转向量 rvec_normalized = axis * equiv_angle return rvec_normalized return rvec # 归一化初始旋转向量 rvec_init = normalize_rotation_vector(rvec_init) # ====================================================== print("初始外参估计 (归一化后):") print("旋转向量 (rvec_init):", rvec_init.ravel()) print("平移向量 (tvec_init):", tvec_init.ravel()) # 定义重投影误差函数(仅优化外参) def reprojection_error(params, world_points_centered, image_points, camera_matrix, dist_coeffs, world_mean, scale_factor): # 解包参数:旋转向量(3) + 平移向量(3) rvec = params[:3].reshape(3, 1) tvec = params[3:6].reshape(3, 1) # 将中心化坐标转换为原始缩放坐标 world_points_scaled = world_points_centered + world_mean # 计算投影点 projected_points, _ = cv2.projectPoints( world_points_scaled, # 使用缩放后的坐标 rvec, tvec, camera_matrix, dist_coeffs ) # 计算重投影误差 error = (image_points - projected_points.reshape(-1, 2)).ravel() return error # 设置初始参数 initial_params = np.zeros(6, dtype=np.float64) initial_params[:3] = rvec_init.ravel() initial_params[3:6] = tvec_init.ravel() # 设置参数边界(旋转向量和平移向量) # ====================================================== # 放宽平移向量边界 bounds = ( [-np.pi, -np.pi, -np.pi, -1e6, -1e6, -1e6], # 下界 [np.pi, np.pi, np.pi, 1e6, 1e6, 1e6] # 上界 ) # ====================================================== # 检查初始参数是否在边界内 print("\n检查初始参数边界:") for i in range(len(initial_params)): lower, upper = bounds[0][i], bounds[1][i] value = initial_params[i] if value < lower or value > upper: print(f"⚠️ 参数 {i} 超出边界: 值={value:.4f}, 边界=[{lower:.4f}, {upper:.4f}]") else: print(f"✅ 参数 {i} 在边界内: 值={value:.4f}, 边界=[{lower:.4f}, {upper:.4f}]") # 使用最小二乘法优化外参 result = least_squares( reprojection_error, initial_params, args=(world_points_centered, image_points, camera_matrix, dist_coeffs, world_mean, scale_factor), bounds=bounds, method='trf', # 信赖域反射法 loss='soft_l1', # 鲁棒损失函数,减少异常点影响 f_scale=10.0, # 损失函数缩放因子 ftol=1e-4, # 函数容忍度(放宽要求) xtol=1e-4, # 参数变化容忍度(放宽要求) gtol=1e-4, # 梯度容忍度(放宽要求) max_nfev=500, # 增加最大函数评估次数 verbose=2 ) # 提取优化结果 optimized_params = result.x rvec_opt = optimized_params[:3].reshape(3, 1) tvec_opt = optimized_params[3:6].reshape(3, 1) # 将平移向量转换回原始坐标系 tvec_original = tvec_opt / scale_factor print("\n优化结果:") print("旋转向量 (rvec_opt):") print(rvec_opt.ravel()) print("\n原始坐标系中的平移向量 (tvec_original):") print(tvec_original.ravel()) # 计算最终重投影误差 world_points_scaled = world_points_centered + world_mean # 恢复缩放坐标 final_projected, _ = cv2.projectPoints( world_points_scaled, rvec_opt, tvec_opt, camera_matrix, dist_coeffs ) final_error = image_points - final_projected.reshape(-1, 2) euclidean_errors = np.sqrt(np.sum(final_error ** 2, axis=1)) mean_error = np.mean(euclidean_errors) max_error = np.max(euclidean_errors) print("\n重投影误差分析:") print(f"平均误差: {mean_error:.4f} 像素") print(f"最大误差: {max_error:.4f} 像素") print(f"所有点误差: {euclidean_errors}") # 可视化误差分布 if mean_error > 5.0: print("\n误差较大的点 (>5像素):") for i, error in enumerate(euclidean_errors): if error > 5.0: print(f"点 {i + 1}: 误差={error:.2f}像素, 世界坐标={world_points[i]}, 图像坐标={image_points[i]}") 这段代码的重投影误差还是很大,有没有其他优化方法来处理世界坐标过大的问题误差较大的点 (>5像素): 点 1: 误差=363.89像素, 世界坐标=[4.26284575e+06 6.44463054e+05 6.39390000e+01], 图像坐标=[1058. 614.] 点 2: 误差=572.38像素, 世界坐标=[4.26284415e+06 6.44468755e+05 6.33510000e+01], 图像坐标=[855. 680.] 点 3: 误差=532.55像素, 世界坐标=[4.26284611e+06 6.44470001e+05 6.32710000e+01], 图像坐标=[901. 711.] 点 4: 误差=524.27像素, 世界坐标=[4.26284710e+06 6.44471268e+05 6.34150000e+01], 图像坐标=[913. 726.] 点 5: 误差=708.61像素, 世界坐标=[4.26284468e+06 6.44473340e+05 6.32630000e+01], 图像坐标=[727. 739.] 点 6: 误差=945.89像素, 世界坐标=[4.26283869e+06 6.44473677e+05 6.32150000e+01], 图像坐标=[480. 689.] 点 7: 误差=1285.11像素, 世界坐标=[4.26283324e+06 6.44478754e+05 6.33720000e+01], 图像坐标=[140. 694.] 点 8: 误差=1134.91像素, 世界坐标=[4.26283860e+06 6.44477972e+05 6.32810000e+01], 图像坐标=[295. 736.] 点 9: 误差=30.44像素, 世界坐标=[4.26285325e+06 6.44455049e+05 6.38270000e+01], 图像坐标=[1452. 599.] 点 10: 误差=53.65像素, 世界坐标=[4.26285155e+06 6.44451282e+05 6.45250000e+01], 图像坐标=[1422. 545.] 点 11: 误差=178.50像素, 世界坐标=[4.26283726e+06 6.44438863e+05 6.69750000e+01], 图像坐标=[1439. 421.] 点 12: 误差=201.52像素, 世界坐标=[4.26284199e+06 6.44437241e+05 6.54010000e+01], 图像坐标=[1269. 467.] 点 13: 误差=153.04像素, 世界坐标=[4.26284630e+06 6.44431715e+05 6.60700000e+01], 图像坐标=[1401. 447.] 点 14: 误差=126.75像素, 世界坐标=[4.26285177e+06 6.44434948e+05 6.41530000e+01], 图像坐标=[1515. 513.] 点 15: 误差=157.60像素, 世界坐标=[4.26285253e+06 6.44431694e+05 6.44340000e+01], 图像坐标=[1542. 497.] 点 16: 误差=220.47像素, 世界坐标=[4.26285089e+06 6.44423337e+05 6.76900000e+01], 图像坐标=[1534. 409.] 点 17: 误差=276.04像素, 世界坐标=[4.26285853e+06 6.44426641e+05 6.44600000e+01], 图像坐标=[1677. 494.] 点 18: 误差=314.37像素, 世界坐标=[4.26286079e+06 6.44431732e+05 6.35030000e+01], 图像坐标=[1729. 533.] 点 19: 误差=417.43像素, 世界坐标=[4.26286561e+06 6.44419362e+05 6.56580000e+01], 图像坐标=[1819. 471.] 点 20: 误差=416.86像素, 世界坐标=[4.26286598e+06 6.44423624e+05 6.43500000e+01], 图像坐标=[1828. 506.] 点 21: 误差=243.80像素, 世界坐标=[4.26285758e+06 6.44470911e+05 6.32860000e+01], 图像坐标=[1532. 816.] 点 22: 误差=501.13像素, 世界坐标=[4.26285421e+06 6.44478653e+05 6.32790000e+01], 图像坐标=[1100. 983.] 点 23: 误差=367.24像素, 世界坐标=[4.26285863e+06 6.44475401e+05 6.32900000e+01], 图像坐标=[1557. 940.] 进程已结束,退出代码为 0
07-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值