np.loadtxt读取文件以及注意事项

numpy.loadtxt 函数用于从文本文件中加载数据,并将其存储为 ndarray 对象。

numpy.loadtxt(fname, dtype=float, comments='#',delimiter=None,
                skiprows=0, usecols=None, unpack=False)

参数解释如下:

fname:要加载的文件路径,这里建议写绝对路径,避免出错

dtype:返回的数组的数据类型,默认为float类型

comments:标识注释行的字符,默认为“#”

delimiter:分割字符,默认为空格

skiprows:跳过开头的行数,默认为0

usecols:要加载的列的索引或者范围,默认为None

unpack:如果为True,返回单独数组,默认为False,返回二维数组

除了第一个参数必选,其他的都是可选。

txt文件内容:

示例代码:

arr = np.loadtxt("F:\\DaiMa\\MyJupyter\\data\\demo.txt",dtype=int,comments="//",
                 delimiter=",",skiprows=2,usecols=(0,2),unpack=True)
print(arr)

运行结果:

当unpack为False时运行结果:

注意事项:

skiprows跳过开头行数时,包括注释行

加载的文本文件必须具有一致的数据类型和相同的列数。否则,可能会导致解析错误或意外结果。

import cv2 import numpy as np import matplotlib.pyplot as plt width, height = 288, 512 max_matches = 60 img_i = cv2.imread('f1_1.png', cv2.IMREAD_COLOR) img_j = cv2.imread('kf_1.png', cv2.IMREAD_COLOR) idx_i2j = np.loadtxt('idx_i2j.txt', dtype=np.float32) input_file = "valid_match_j.txt" output_file = "./logs/valid_matchs_j.txt" with open(input_file, "r") as f_in, open(output_file, "w") as f_out: for line in f_in: value = line.strip() if value == "True": f_out.write("1\n") elif value == "False": f_out.write("0\n") valid = np.loadtxt('./logs/valid_matchs_j.txt', dtype=bool) def index_to_coord(index): x = int(index) % width y = int(index) // width return (x, y) valid_indices = np.where(valid)[0] np.random.shuffle(valid_indices) selected = valid_indices[:min(max_matches, len(valid_indices))] kp1, kp2, matches = [], [], [] for i, k in enumerate(selected): x_i, y_i = index_to_coord(k) x_j, y_j = index_to_coord(idx_i2j[k]) kp1.append(cv2.KeyPoint(x_i, y_i, 1)) kp2.append(cv2.KeyPoint(x_j, y_j, 1)) matches.append(cv2.DMatch(i, i, 0)) out_img = np.empty((max(height, height), width*2, 3), dtype=np.uint8) cv2.drawMatches(img_i, kp1, img_j, kp2, matches, outImg=out_img, flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS, matchColor=(0, 255, 0), singlePointColor=(255, 0, 0)) plt.figure(figsize=(20, 10)) plt.imshow(cv2.cvtColor(out_img, cv2.COLOR_BGR2RGB)) plt.axis('off') plt.title(f'({len(selected)}/{len(valid_indices)} valid matches)') save_path = './logs/mast3r_match.png' plt.savefig(save_path, bbox_inches='tight', dpi=150, pad_inches=0.1) plt.show() 分析以上代码,能否帮助在以上代码的基础上实现一个新的计算匹配对中存在的误匹配数量模块?误匹配的计算规则如下:首先对于每个匹配对,计算它们像素空间上的欧几里德距离,再统计所有匹配对欧几里德距离之和来计算它们的平均值和标准差,之后对于每个匹配对,如果它们像素空间上的欧几里德距离与距离平均值的差距大于两倍标准差,则将它们视为可能的误匹配点。计算出误匹配对后,用print函数输出误匹配对数量。
04-02
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值