for i=1:length(folderContents) files = dir(fullfile(folder, '*.mat')); % 获取文件夹中的.mat文件 filename = fullfile(folder, files.name); % 获取文件名 load(filename); % 加载文件 % 对加载的数据进行处理 end运行出错怎么改
时间: 2023-12-19 15:04:56 浏览: 145
您可以尝试以下代码:
```
folderContents = dir(folder); % 获取文件夹中的所有内容
for i = 1:length(folderContents)
if ~folderContents(i).isdir && strcmp(folderContents(i).name(end-3:end), '.mat') % 判断是否是.mat文件
filename = fullfile(folder, folderContents(i).name); % 获取文件名
load(filename); % 加载文件
% 对加载的数据进行处理
end
end
```
这样可以避免使用 `files` 变量时未能正确获取文件名。
相关问题
% 获取csv文件列表csv_dir = '/path/to/csv/folder/';csv_files = dir(fullfile(csv_dir, '*.csv'));% 创建汇总csv文件output_csv = '/path/to/output.csv';fid = fopen(output_csv, 'w');fprintf(fid, '%s,%s,%s\n', 'col1', 'col2', 'col3'); % 根据实际情况修改列名% 循环读取每个csv文件for i = 1:length(csv_files) % 读取csv文件 csv_file = fullfile(csv_dir, csv_files(i).name); data = csvread(csv_file, 1, 0); % 第一行为标题行,从第二行开始读取数据 % 将数据写入汇总csv文件 for j = 1:size(data, 1) fprintf(fid, '%d,%f,%s\n', data(j, 1), data(j, 2), mat2str(data(j, 3))); % 根据实际情况修改列的数据类型和格式 endend% 关闭汇总csv文件fclose(fid);
这段代码是用来合并多个 CSV 文件的数据,生成一个汇总的 CSV 文件。具体的实现方法是,先获取指定文件夹下的所有 CSV 文件,然后循环读取每个 CSV 文件的数据,将数据写入汇总 CSV 文件中。
代码中的主要步骤包括:
1. 指定 CSV 文件夹路径,获取该路径下所有 CSV 文件列表。
2. 创建汇总 CSV 文件,设置列名。
3. 循环读取每个 CSV 文件,将数据写入汇总文件。
4. 关闭汇总 CSV 文件。
具体实现细节可以参考代码注释。需要注意的是,汇总 CSV 文件的列名和数据类型需要根据实际情况进行修改。
% 读取图片文件夹中的所有图片 img_folder = 'C:\Users\15225\Desktop\keti_matlab\Pending images/'; img_files = dir(fullfile(img_folder, '*.bmp')); for i = 1:length(img_files) % 读取图片 img = imread(fullfile(img_folder, img_files(i).name)); % 灰度化 gray_img = im2gray(img); % 阈值分割-亮度大于该值的设置为1(亮点) 反之为0(暗点) threshold = 240; bw_img = gray_img > threshold; % 去除小的连通域-像素个数大于该值的会被计算标记 反之不计算标记 bw_img = bwareaopen(bw_img, 750); % 填充连通域内部空洞 bw_img = imfill(bw_img, 'holes'); % 获取连通域属性-获取二值图像中所有连通域的重心坐标 CC = bwconncomp(bw_img); stats = regionprops(CC, 'Centroid'); % 在原图上绘制标记点和序号 figure; imshow(img); hold on; markers = struct('index', {}, 'position', {}); for j = 1:length(stats) x = stats(j).Centroid(1); y = stats(j).Centroid(2); % 绘制红色圆点大小为 - 10 宽度为 - 2 plot(x, y, 'ro', 'MarkerSize', 10, 'LineWidth', 2); % 在标记点旁边添加序号文本 text(x+10, y+10, num2str(j), 'Color', 'r'); % 存储序号和位置信息到结构体数组 markers(j).index = j; markers(j).position = [x, y]; end % 保存 二值化 图片 result_folder = 'C:\Users\15225\Desktop\keti_matlab\results\'; bw_result_file = fullfile(result_folder, sprintf('bw_result_%d.bmp', i)); imwrite(bw_img, bw_result_file); fprintf('Extracted markers saved to file: %s\n', bw_result_file); % 保存 重心标记 图片 result_file = fullfile(result_folder, sprintf('result_%d.bmp', i)); saveas(gcf, result_file); fprintf('Extracted markers saved to file: %s\n', result_file); % 保存 重心坐标 到文件 result_txt_file = fullfile(result_folder, sprintf('result_%d.txt', i)); fid = fopen(result_txt_file, 'w'); for j = 1:length(markers) fprintf(fid, 'Marker #%d: (%.6g, %.6g)\n', markers(j).index, markers(j).position); end fclose(fid); end 添加代码需求,保存重心在世界坐标系下的坐标
可以在获取连通域属性后,使用相机标定得到的相机内参和外参将图像中的重心坐标转换为世界坐标系下的坐标。具体代码如下:
```matlab
% 获取连通域属性-获取二值图像中所有连通域的重心坐标
CC = bwconncomp(bw_img);
stats = regionprops(CC, 'Centroid');
% 相机标定得到的相机内参和外参
camera_params = load('camera_params.mat');
% 在原图上绘制标记点和序号
figure;
imshow(img);
hold on;
markers = struct('index', {}, 'image_position', {}, 'world_position', {});
for j = 1:length(stats)
x = stats(j).Centroid(1);
y = stats(j).Centroid(2);
% 绘制红色圆点大小为 - 10 宽度为 - 2
plot(x, y, 'ro', 'MarkerSize', 10, 'LineWidth', 2);
% 在标记点旁边添加序号文本
text(x+10, y+10, num2str(j), 'Color', 'r');
% 将图像坐标系下的重心坐标转换为世界坐标系下的坐标
image_points = [x; y; 1];
world_points = camera_params.R * camera_params.K \ image_points;
world_points = world_points / world_points(3);
% 存储序号、图像坐标和世界坐标
markers(j).index = j;
markers(j).image_position = [x, y];
markers(j).world_position = world_points';
end
% 保存 二值化 图片
result_folder = 'C:\Users\15225\Desktop\keti_matlab\results\';
bw_result_file = fullfile(result_folder, sprintf('bw_result_%d.bmp', i));
imwrite(bw_img, bw_result_file);
fprintf('Extracted markers saved to file: %s\n', bw_result_file);
% 保存 重心标记 图片
result_file = fullfile(result_folder, sprintf('result_%d.bmp', i));
saveas(gcf, result_file);
fprintf('Extracted markers saved to file: %s\n', result_file);
% 保存 重心坐标 到文件
result_txt_file = fullfile(result_folder, sprintf('result_%d.txt', i));
fid = fopen(result_txt_file, 'w');
for j = 1:length(markers)
fprintf(fid, 'Marker #%d: Image position - (%.6g, %.6g), World position - (%.6g, %.6g, %.6g)\n', ...
markers(j).index, markers(j).image_position, markers(j).world_position);
end
fclose(fid);
```
其中,`camera_params.mat`是一个.mat格式的文件,保存了相机的内参和外参信息,需要根据实际情况进行修改。
阅读全文