import os import json import csv import cv2 from segment_anything import SamPredictor, sam_model_registry folder_path = 'D:\\segment-anything-main\\segment-anything-main\\input\\Normal\\' # 替换为实际的文件夹路径 output_file = 'D:\\细胞识别\\output.csv' # 替换为实际的输出文件路径 data_list = [] # 用于存储所有的坐标信息 for filename in os.listdir(folder_path): if filename.endswith('.json'): json_path = os.path.join(folder_path, filename) # 读取JSON文件 with open(json_path) as file: data = json.load(file) # 获取多边形坐标 shapes = data['shapes'] polygon_points = shapes[0]['points'] # 假设只有一个多边形标注 # 计算最小包围框的左上角和右下角坐标 x_coordinates = [point[0] for point in polygon_points] y_coordinates = [point[1] for point in polygon_points] min_x = min(x_coordinates) min_y = min(y_coordinates) max_x = max(x_coordinates) max_y = max(y_coordinates) # 将坐标信息添加到列表中 data_list.append({'Filename': filename, 'Min_X': min_x, 'Min_Y': min_y, 'Max_X': max_x, 'Max_Y': max_y}) # 写入CSV文件 with open(output_file, 'w', newline='') as file: fieldnames = ['Filename', 'Min_X', 'Min_Y', 'Max_X', 'Max_Y'] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() writer.writerows(data_list) # 生成input_prompts input_prompts = [] for data in data_list: input_prompt = f"处理文件:{data['Filename']},左上角坐标:({data['Min_X']}, {data['Min_Y']}),右下角坐标:({data['Max_X']}, {data['Max_Y']})" input_prompts.append(input_prompt) sam = sam_model_registry["default"](checkpoint="D:\\segment-anything-main\\segment-anything-main\\sam_vit_h_4b8939.pth") predictor = SamPredictor(sam) for filename in os.listdir(folder_path): if filename.lower().endswith(('.png', '.jpg', '.jpeg')): image_path = os.path.join(folder_path, filename) # Load and set the image for prediction your_image = cv2.imread(image_path) predictor.set_image(your_image) # Perform prediction using input prompts masks, _, _ = predictor.predict(input_prompts) # Perform further processing or analysis on the predicted masks for i, mask in enumerate(masks): mask_filename = f"mask_{i + 1}_{filename}" mask_path = os.path.join(folder_path, mask_filename) cv2.imwrite(mask_path, mask)
时间: 2024-04-17 20:28:41 浏览: 173
SAM2图像分割项目+跑通版本+segment-anything-2.zip
这段代码是一个细胞识别的脚本,它将指定文件夹中的图片进行细胞分割,并将分割后的结果保存为图片和CSV文件。具体的流程如下:
1. 首先,通过读取指定文件夹中的JSON文件,获取细胞的多边形坐标信息,并计算出最小包围框的左上角和右下角坐标。
2. 将坐标信息添加到一个列表中,用于后续写入CSV文件。
3. 使用列表中的坐标信息生成输入提示语句。
4. 加载预训练的细胞识别模型,并创建一个细胞识别器。
5. 遍历指定文件夹中的图片文件,对每张图片进行细胞识别:
a. 加载并设置待预测的图片。
b. 使用输入提示语句进行细胞识别,得到分割后的细胞掩模。
c. 可以对预测的掩模进行后续处理或分析。
d. 将分割后的掩模保存为图片。
请注意,这段代码中使用了第三方库 `segment_anything` 进行细胞分割,你需要先安装该库才能运行这段代码。
阅读全文