matlab版本
可以从csv文件读取图片类别,先裁成1000*1000,再下采样成299*299
clear;
path = 'E:\BaiduNetdiskDownload\rockData';%'C:\Users\Administrator\Desktop\6models\0bilater_result';
output_path = 'E:\BaiduNetdiskDownload\rockData\rock-pre\';
path_temp = fullfile(path, '*'); %各种路径
%M = csvread('E:\BaiduNetdiskDownload\B题样例数据\rock_label_1.csv',0,0);
T = readtable('E:\BaiduNetdiskDownload\rockData\rock_label.csv');
C = table2cell(T);
n_pc_dir = dir(path_temp);
kernal_size = 298; %裁剪成299的图片
im_num = length(n_pc_dir);
for s=3:im_num
data = imread(fullfile(path, n_pc_dir(s).name));
center = (size(data)/2);
center = center(1:2);
xmin = floor(center(1)-kernal_size*2-kernal_size/2);
ymin = floor(center(2)-kernal_size*2-kernal_size/2);
for i=0:2 %按中心裁剪,裁9张
xmin = xmin + kernal_size;
ymin = floor(center(2)-kernal_size*2-kernal_size/2);
for j=0:2
ymin = ymin + kernal_size;
crop_image = imcrop(data, [ymin,xmin, kernal_size, kernal_size]); % 使用 imcrop() 函数来裁剪图片,第二个参数的格式为 [XMIN YMIN WIDTH HEIGHT]
% imwrite(crop_image, [fullfile(output_path, n_pc_dir(s).name(1:end-6)) '-' num2str(i*3+j+1) '.bmp']); % 保存文件
name{9*(s-3)+i*3+j+1,1} = [n_pc_dir(s).name(1:end-6) '-' num2str(i*3+j+1)];
idx = find([T{:,1}] == str2num(n_pc_dir(s).name(1:end-6)));
name{9*(s-3)+i*3+j+1,2} = C(idx,2);
end
end
%filename_noise = n_pc_dir(s).name(1:end-4);
end
nameT = cell2table(name);
writetable(nameT,'E:\BaiduNetdiskDownload\rockData\rock_label_pre.csv'); %可以将每个图片的类别放到csv中
python版本
可以按照概率裁剪图片,裁到中间的概率高
import os
import cv2
import random
from PIL import Image
import pandas as pd
import numpy as np
import matplotlib. pyplot as plt
import torch
def image_downsample ( path, output_path_down, output_path_crop, cutNum, crop_size,