python环境下进行灰度转伪彩色转换
1、理论基础知识:
1)伪彩色增强,对灰度进行颜色划分。由一定的映射关系求R,G,B,组成该点的彩色值;
还有空域转频域再转空域和 3)光滑非线性的变换函数的方法,都太复杂,具体请度娘。
一下是百度得到的伪彩色经典图形和转换函数
2、import cv2 as cv
import numpy as np
image = cv.imread('c:\\meiping1.png')
cv.imshow('image',image)
grayImg = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
先使用imread加载图片
cvtColor转换为 灰度图。
3、根据经验公式编写SetcolorR 完成Red颜色转换
def SetcolorR(gray): if gray < 127: return 0 elif gray > 191: return 255 else: return 4 * gray - 510
4、根据经验公式编写SetcolorG完成Green颜色转换
def SetcolorG(gray):
if (gray <= 63):
return 254 - 4*gray
elif (gray >= 64 and gray <= 127):
return (gray-191)*4 - 254
elif (gray >= 128 and gray <= 191):
return 255
elif (192 <= gray and gray <= 255):
return (1022 - 4*gray)
5、根据经验公式编写SetcolorB完成Blue颜色转换
def SetcolorB(gray): if (0 <= gray and gray <= 63): return 255 elif (64 <= gray and gray <= 127): return 510 - 4*gray elif (128 <= gray and gray <= 255): return 0
6、进行TransColor转换
先np.zeros构造彩色矩阵
然后每个像素按照经验公式进行转换!
def TransColor(image): rows = image.shape[0] cols = image.shape[1] print(rows, cols) Color = np.zeros((rows, cols, 3), np.uint8) 使用zeros构造彩色矩阵 这种方法很好 很常用
for i in range(rows): for j in range(cols): r = SetcolorR(image[i,j]) g = SetcolorG(image[i,j]) b = SetcolorB(image[i,j]) Color[i, j, 0] = r Color[i, j, 1] = g Color[i, j, 2] = b return Color
7、主函数部分
image = cv.imread('c:\\meiping1.png')
cv.imshow('image',image)
grayImg = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
# print(image)
grayImg2Color = TransColor(grayImg) 调用颜色转换函数!
cv.imshow('grayImg',grayImg)
r,g,b = cv.split(grayImg2Color)
cv.imshow('Color0',r)
cv.imshow('Color1',g)
cv.imshow('Color2',b)
cv.imshow('grayImg2Color',grayImg2Color)
cv.waitKey(0)
cv.destroyAllWindows()