【问题标题】:Consecutive Image Masking in PythonPython中的连续图像遮罩
【发布时间】:2021-08-19 20:16:42
【问题描述】:

我正在开展一个项目,以掩盖不同位置的连续图像,以研究单只苍蝇的运动。最终图像应如下所示:correct masking of image。然而,随着代码继续运行,图像开始变成这样:Incorrect image masking,这不是我想要的,因为我只想要每张图像一个可见区域(包含一只苍蝇的圆圈)而不是三个。我需要对我的代码做些什么,以使每个图像中的不同位置只有一个圆圈,而不是图像中有多个圆圈?

`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()

`

【问题讨论】:

    标签: python image-masking


    【解决方案1】:

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

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

    在每个循环中都在您的面具上添加一个新圆圈。有很多方法可以解决这个问题,但您可以先将此行移至循环中 cv2.circle 调用的上方,如下所示:

    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)
    
    

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

    【讨论】:

    • 当我这样做时,它会说“在赋值之前引用了局部变量'行'”。我认为由于 for 循环定义了行是什么,因此该行必须位于它原来的位置。对下一步做什么有任何想法吗?
    • @RamzyIssa 抱歉,我的评论不够清楚。我已经用整个函数编辑了我的评论,将掩码变量移动到内部循环中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2018-05-29
    • 2016-06-09
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多