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文件中检测结果是否转化正确。