Python中的连续图像掩蔽



我正在做一个项目,在不同的位置掩盖连续的图像,以研究单个苍蝇的运动。最终的图像应该是这样的:正确的图像遮罩。然而,随着代码继续运行,图像开始出现如下情况:不正确的图像屏蔽,这不是我想要的,因为我只希望每个图像有一个可见区域(包含一只苍蝇的圆圈),而不是三个。我需要对我的代码做些什么,以便在每个图像中只有一个圆圈存在于不同的位置,而不是在图像中有多个圆圈?

`List = [
[180, 353, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena2")],
[180, 542, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena3")],
[180, 728, 85, str("/media/pi/T3 1TB 2Ch xFer/Ramzy Masked /Arena4")],
]
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))
mask = np.zeros(img.shape[:2], dtype="uint8")

for row in List:
cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)
masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite(os.path.join(row[3], f'{filename}'),  masked)
load_images_from_folder("/media/pi/T3 1TB 2Ch xFer/Ramzy Research 
Photos/8.17.21")

cv2.waitKey(0)
cv2.destroyAllWindows()

我不太熟悉cv2库,但我相信这一行:

cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)

是在你的掩模上每循环添加一个新的圆。有很多方法可以解决这个问题,但你可以从将这条线移动到cv2上方开始。像这样在循环中循环调用:

def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
img = cv2.imread(os.path.join(folder,filename))

for row in List:
mask = np.zeros(img.shape[:2], dtype="uint8")
cv2.circle(mask, (row[0], row[1]), row[2], 255, -1)
masked = cv2.bitwise_and(img, img, mask=mask)
cv2.imwrite(os.path.join(row[3], f'{filename}'),  masked)

这将在每次循环迭代时创建一个全新的掩码。

相关内容

  • 没有找到相关文章

最新更新