为opencv python创建自定义颜色映射

为opencv python创建自定义颜色映射,python,opencv,optimization,colormap,pypy,Python,Opencv,Optimization,Colormap,Pypy,我在一个文本文件中创建了一个自定义颜色映射,从python 3.6中读取。 要映射for循环中的每种颜色,大约需要9秒 以下是片段: for x in range(256): # z = int(rgb_c[x][0]) # r = int(rgb_c[x][1]) # g = int(rgb_c[x][2]) # b = int(rgb_c[x][3]) # Apply color to ndvi # ndvi_col[ndvi_g

我在一个文本文件中创建了一个自定义颜色映射,从python 3.6中读取。 要映射for循环中的每种颜色,大约需要9秒

以下是片段:

    for x in range(256):

    # z = int(rgb_c[x][0])
    # r = int(rgb_c[x][1])
    # g = int(rgb_c[x][2])
    # b = int(rgb_c[x][3])

    # Apply color to ndvi
    # ndvi_col[ndvi_g == z[x]] = [r[x], g[x], b[x]]
    ndvi_col[ndvi_g == int(rgb_c[x][0])] = [int(rgb_c[x][1]), int(rgb_c[x][2]), int(rgb_c[x][3])]
听说pypyjit编译器可以提高速度和性能,这会影响for循环吗?我甚至尝试了一个单独的列表,但没有改变。 我愿意接受任何提高速度和性能的建议

编辑:
解决方案

我终于了解到,通过每次迭代进行映射是一种痛苦且最糟糕的实现方式。在案例中找到指向已发布解决方案的链接。中的原始代码

#/usr/bin/env python
'''
OpenCV自定义颜色映射示例
Satya Mallick版权所有2015
'''
进口cv2
将numpy作为np导入
def applyCustomColorMap(灰色):
lut=np.zero((256,1,3),dtype=np.uint8)
#红色的
lut[:,0,0]=[255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,251,249,247,245,242,241,238,237,235,233,231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,201,199,197,195,193,191,189,187,185,183,181,179,177,175,173,171,169,167,165,163,161,159,157,155,153,151,149,147,145,143,141,138,136,134,132,131,129,126,125,122,121,118,116,115,113,111,109,107,105,102,100,98,97,94,93,91,89,87,84,83,81,79,77,75,73,70,68,66,64,63,61,59,57,54,52,51,49,47,44,42,40,39,37,34,33,31,29,27,25,22,20,18,17,14,13,11,9,6,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
#绿色的
lut[:,0,1]=[ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,250,248,246,244,242,240,238,236,234,232,230,228,226,224,222,220,218,216,214,212,210,208,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,176,174,171,169,167,165,163,161,159,157,155,153,151,149,147,145,143,141,139,137,135,133,131,129,127,125,123,121,119,117,115,113,111,109,107,105,103,101,99,97,95,93,91,89,87,85,83,82,80,78,76,74,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0 ]
#蓝色的
lut[:,0,2]=[195,194,193,191,190,189,188,187,186,185,184,183,182,181,179,178,177,176,175,174,173,172,171,170,169,167,166,165,164,163,162,161,160,159,158,157,155,154,153,152,151,150,149,148,147,146,145,143,142,141,140,139,138,137,136,135,134,133,131,130,129,128,127,126,125,125,125,125,125,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126]
#通过LUT应用自定义颜色映射
im_color=cv2.LUT(im_gray,LUT)
返回imu颜色;
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
im=cv2.imread(“pluto.jpg”,cv2.imread_灰度);
im=cv2.CVT颜色(im,cv2.COLOR_GRAY2BGR);
im_color=applyCustomColorMap(im);
cv2.imwrite('/tmp/colormap_algage.jpg',im_color)
cv2.imshow(“伪彩色图像”,im_颜色);
cv2.waitKey(0);

由于每个x独立于其他x,请尝试使用numpy,因为它使任务并行化,可能会提高性能这正是您在
for
循环中所做的事情。请将您的问题显示为所有相关代码。阅读有关访问和更改像素的内容。特别是关于array.itemset()的部分因此,您正在做一个查找表,以便将颜色贴图应用于图像(灰度)?您可以查看。不难使用,您创建了一个256 RGB颜色的数组(形状的numpy数组(1256,3))并将其与灰度图像一起传递给function@api55谢谢!我查找了LUT并找到了答案;)
#!/usr/bin/env python

'''
    OpenCV Custom Colormap  Example
    
    Copyright 2015 by Satya Mallick <spmallick@learnopencv.com>
    
'''

import cv2
import numpy as np

def applyCustomColorMap(im_gray) :

    lut = np.zeros((256, 1, 3), dtype=np.uint8)

    #Red
    lut[:, 0, 0] = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,253,251,249,247,245,242,241,238,237,235,233,231,229,227,225,223,221,219,217,215,213,211,209,207,205,203,201,199,197,195,193,191,189,187,185,183,181,179,177,175,173,171,169,167,165,163,161,159,157,155,153,151,149,147,145,143,141,138,136,134,132,131,129,126,125,122,121,118,116,115,113,111,109,107,105,102,100,98,97,94,93,91,89,87,84,83,81,79,77,75,73,70,68,66,64,63,61,59,57,54,52,51,49,47,44,42,40,39,37,34,33,31,29,27,25,22,20,18,17,14,13,11,9,6,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

    #Green
    lut[:, 0, 1] = [ 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,252,250,248,246,244,242,240,238,236,234,232,230,228,226,224,222,220,218,216,214,212,210,208,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,176,174,171,169,167,165,163,161,159,157,155,153,151,149,147,145,143,141,139,137,135,133,131,129,127,125,123,121,119,117,115,113,111,109,107,105,103,101,99,97,95,93,91,89,87,85,83,82,80,78,76,74,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0 ]

    #Blue
    lut[:, 0, 2] = [195,194,193,191,190,189,188,187,186,185,184,183,182,181,179,178,177,176,175,174,173,172,171,170,169,167,166,165,164,163,162,161,160,159,158,157,155,154,153,152,151,150,149,148,147,146,145,143,142,141,140,139,138,137,136,135,134,133,131,130,129,128,127,126,125,125,125,125,125,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126]

    #Apply custom colormap through LUT
    im_color = cv2.LUT(im_gray, lut)
    
    return im_color;


if __name__  == '__main__' :

    im = cv2.imread("pluto.jpg", cv2.IMREAD_GRAYSCALE);
    im = cv2.cvtColor(im, cv2.COLOR_GRAY2BGR);
    im_color = applyCustomColorMap(im);

    cv2.imwrite('/tmp/colormap_algae.jpg', im_color)
    cv2.imshow("Pseudo Colored Image", im_color);
    cv2.waitKey(0);