RGB图片转单通道格式的图片

目前已有很多博客介绍了RGB格式的图片转换,主要为三通道的RGB图片转单通道或多通道的RGBA,CMYK,L,P等格式,可以直接用convert函数做转换,这里不再赘述。由于前段时间本人做的语义分割项目中标签需要单通道的图片,并且单通道图片中每个像素依然可以表示为一个类。首先利用python的Image库读入图片:
Image.open(path)
然后按行列读取像素值,可以利用函数:getpixel(i,j),表示读取第i行第j列的像素值,然后对其进行赋值,利用函数:putpixel((i,j),(r,g,b),这里r,g,b值需要相同,例如原图中红色的像素值表示道路,我希望在处理后的单通道图片中1表示道路,那么上面这个r,g,b参数就可以设置为(1,1,1),然后将其转换为array矩阵的形式,并保存为“L”格式的图片,转换后的单通道图片一般都是黑色的,但是各像素是有值的(如:1,2,3,4,5.。。。。)

f (data1[0]==0 and data1[1]==0 and data1[2]==255):
                    img.putpixel((i,j),(1,1,1))

如果想实现逆转换,即L格式转RGB格式,首先使用CV库读取图片,并单独设定一个同等宽高,值全是0的三维矩阵,例如:
np.zeros(imgL.width,imgL.height,3),再按照原图中的像素值设定新矩阵中的像素值:

color = np.ones([imgL.shape[0], imgL.shape[1], 3])
        color[imgL==0] = [0, 0, 0] 
        color[imgL==1] = [255, 0, 0]  
        color[imgL==2] = [0, 255, 0] 
        color[imgL==3] = [0, 0, 255] 

RGB转L代码
L转RGB代码

你可能感兴趣的:(python处理文件)