Python连续图像蒙版处理:修复单图仅保留1个果蝇观测圆形区域问题
问题原因
你的代码错误是蒙版初始化位置不对导致的:你在遍历3组圆形坐标的循环外创建了全局蒙版,每轮循环都会在上一轮已经画过圆的蒙版上叠加新的圆形,最终越靠后的输出文件夹里的可见圆形数量越多。
修复方案
将蒙版的初始化逻辑移动到遍历圆形配置的循环内部,每次处理单个圆形区域时都新建空白蒙版,即可保证每张输出图仅保留1个对应位置的圆形可见区。
修改后的代码如下:
import os import cv2 import numpy as np # 圆形配置:[圆心x, 圆心y, 半径, 输出文件夹路径] arena_config = [ [180, 353, 85, "/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena2"], [180, 542, 85, "/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena3"], [180, 728, 85, "/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena4"], ] def load_images_from_folder(folder): for filename in os.listdir(folder): img_path = os.path.join(folder, filename) img = cv2.imread(img_path) if img is None: # 跳过非图像文件避免报错 continue for config in arena_config: # 每次处理单个圆形配置时新建空白蒙版 mask = np.zeros(img.shape[:2], dtype="uint8") # 仅画当前配置对应的1个圆形 cv2.circle(mask, (config[0], config[1]), config[2], 255, -1) masked = cv2.bitwise_and(img, img, mask=mask) # 保存到对应输出文件夹 cv2.imwrite(os.path.join(config[3], filename), masked) load_images_from_folder("/media/pi/T3 1TB 2Ch xFer/Ramzy Research Photos/8.17.21") cv2.waitKey(0) cv2.destroyAllWindows()
额外注意事项
- 请提前确认三个输出文件夹已创建,否则会触发写入路径不存在的报错
- 你原始路径中
Ramzy Masked末尾有多余空格,请核对实际路径和配置中的路径是否一致,避免找不到路径的问题
内容的提问来源于stack exchange,提问作者Ramzy Issa
相关产品推荐
相关产品推荐

