根据RGB图像中颜色值生成标签灰度图,

1.前言:

代码目的:将RGB图像中不同的颜色生成标签灰度图,cyan[青蓝色]映射为0,red[红色]映射为1,yellow[黄色]映射为2
在这里插入图片描述

2.代码

# -*- coding: utf-8 -*-
"""
Created on Sat May  7 16:54:02 2022

@author: hp

Describe:将RGB图像中颜色,生成标签灰度图
         例:RGB图像中cyan、red、yellow三种不同的颜色区域,需要根据颜色生成灰度图,作为标签数据
             cyan、red和yellow的像素值分别是[0, 248, 248]、[248, 0, 0]、[248, 248, 0]
             cyan   -->  0
             red    -->  1
             yellow -->  2
"""

import numpy as np
from PIL import Image

def write_text(fileName, data):
    """
    将接收得到的数据dada写入名为fileName的text文件中
    :param fileName:text文件的名称
    :param data:要写入的数据,这里希望是一个数组
    """
    with open(fileName, 'w+') as f:
        for i in range(len(data)):
            for j in range(len(data)):  
                # print(data[i][j])
                f.write(str(data[i][j]) + ' ')
            f.write('\n') 
 
def G_0_to_2(data, G, B):
    """
    将接收到的通道值,在B通道中值为0,但在G通道中值不为0,为248的像素点值转化为2
    yellow --> 2
    :param data: 一个通道的结果数组
    :para data: 从RGB图像中分离出来的G通道结果数组
    :para data: 从RGB图像中分离出来的B通道结果数组
    """
    for i in range(480):
        for j in range(480):
            if B[i][j] == 0 and G[i][j] != 0:
                data[i][j] = 2
    return data

def B_248_to_1(data, R, G):
    """
    将接收到的通道值,在R通道中值为248,但在G通道中值为0,不为为248的像素点值转化为1
    red  --> 1
    :param data: 一个通道的结果数组
    :para data: 从RGB图像中分离出来的R通道结果数组
    :para data: 从RGB图像中分离出来的G通道结果数组
    """
    for i in range(480):
        for j in range(480):
            if R[i][j] == 248 and G[i][j] != 248:
                data[i][j] = 1
    return data

if __name__ == "__main__":
    imgPath = r"*****************\img\365.png" 

    img =Image.open(imgPath)
    
    data = np.array(img)
   
    R = data[:, :, 0]
    G = data[:, :, 1]
    B = data[:, :, 2]
   
    # 因为cyan的像素值是为[0, 248, 248],cyan要映射的值是0,在R通道中0值正是对应的cyan
    data = R
    data = G_0_to_2(data, G, B)
    data = B_248_to_1(data, R, G)
 
    label = Image.formarray(data)
    label.save('result/365.png')

结果:

在这里插入图片描述
保存到txt文件中检测结果是否转化正确。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值