在python中使用相应的蒙版进行图像分割

时间:2018-10-20 18:57:50

标签: python for-loop image-processing machine-learning image-segmentation

我要分割的图像具有相应的蒙版。

我将图像放在一个文件夹中,并将它们对应的遮罩放在另一个文件夹中。 我正在尝试应用这些蒙版或使用python中的两个for循环将它们乘以图像,以获取分段图像。

我正在使用以下代码:

def ImageSegmentation():

SegmentedImages = []

for img_path in os.listdir('C:/Users/mab/Desktop/images/'):
    img=io.imread('C:/Users/mab/Desktop/data/'+img_path)
    for img_path2 in os.listdir('C:/Users/mab/Desktop/masks/'):
        Mask = io.imread('C:/Users/mab/Desktop/masks/'+img_path2)

        [indx, indy] = np.where(Mask==0)
        Color_Masked = img.copy()
        Color_Masked[indx,indy] = 0

        matplotlib.image.imsave('C:/Users/mab/Desktop/SegmentedImages/'+img_path2,Color_Masked)
        segs.append(Color_Masked)
 return np.vstack(Color_Masked)

当我为单个图像和单个蒙版(没有文件夹和循环)尝试此代码时,此代码有效。

但是,当我尝试遍历两个文件夹中的图像和蒙版时,我得到的输出图像被错误的蒙版(而不是其对应的蒙版)分割。

我不能单独对每个图像进行分段而不循环,因为我有500多个图像及其蒙版。

我不知道我在此代码中缺少什么或放置了什么错误,我该如何解决?另外,有没有更简单的方法来获取分割的图像?

1 个答案:

答案 0 :(得分:0)

除非我被严重误解,否则您只需要以下内容:

instance Eq Example where
    (==) (Constructor1 e1) (Constructor1 e2) = e1 == e2
    (==) (Constructor2 e1) (Constructor2 e2) = e1 == e2
    (==) _ _ = False

在我的iMac上,这种事情会产生:

import glob

filelist = glob.glob('C:/Users/mab/Desktop/images/*.png') 
for i in filelist:
    mask = i.replace("images","masks")
    print(i,mask)