1

我已经搜索了任何可能的解决方案,但所有答案都不是很清晰或不完整。如何将梯度图应用于灰度图像

所以,说我已经上传到内存中的图像:

image = Image.open('image.jpg') 

我如何应用此梯度(#582f91到#00aeef):

enter image description here

到该图像:

enter image description here

所以我T成为这样的:提前

enter image description here

感谢。

回答

0

我用用Cython脚本之前解决了这个问题(如需要在高帧速率更新)来实现这一目标。这里输入cmap到功能是一个矩阵的平面阵列,其中每一行对应于一个颜色,并且对应于R G B值。我用一个网站来生成渐变,虽然不记得哪一个。图像被平滑以获得速度并在0到255的int值之间缩放。

为了能够导入和使用用Cython功能,您将需要从命令行运行安装脚本,一旦你有安装用Cython使用PIP即

pip install cython 
pyhton setup.py build_ext --inplace 

这则应该产生交流文件和.so文件。

用Cython代码:

import numpy as np 
cimport numpy as np 
cimport cython 

DTYPE1 = np.float 
ctypedef np.float_t DTYPE1_t 

DTYPE2 = np.int 
ctypedef np.int_t DTYPE2_t 

@cython.boundscheck(False) 
@cython.wraparound(False) 

def mat_to_im(np.ndarray[DTYPE2_t, ndim=1] data, np.ndarray[DTYPE2_t, ndim=1] cmap): 

    cdef int wid = data.size 
    cdef int x, x1, y 

    cdef np.ndarray[DTYPE2_t, ndim=1] im = np.zeros([wid*3], dtype=DTYPE2) 

    for x in range(wid): 

     x1 = x*3 
     y = data[x]*3 

     im[x1] = cmap[y] 
     im[x1+1] = cmap[y+1] 
     im[x1+2] = cmap[y+2] 

return im 

安装文件:

from distutils.core import setup, Extension 
from Cython.Build import cythonize 
import numpy 

setup(
    name='image convert', 
    version='1', 
    description='color map images', 
    author='scooper', 
    install_requires=['numpy'], 
    ext_modules=cythonize([ 
     Extension("image_convert", ["image_convert.pyx"], include_dirs=[numpy.get_include()])]) 
) 

这应该与任何问题的帮助(我已经从更大的代码文件截取设置和没有测试过):http://cython.readthedocs.io/en/latest/src/quickstart/build.html

+0

所以基本上不得不使用映射单独重新分配像素值。返回的图像然后重新成形为原始图像尺寸。 – samocooper

+0

谢谢你。现在让我试试看。 –

+0

恩,好的。我以前从未使用过Cython。你能给我一个快速指南,我如何使用你的功能? –

0

只需使用LinearSegmentedColormap

# make a cmap 
mycm=matplotlib.colors.LinearSegmentedColormap.from_list('',['#582f91', '#00aeef']) 

# apply on a canal 
imgrad=mycm(image[:,:,0])