Python中有OpenCV色图吗?

7 投票
4 回答
35428 浏览
提问于 2025-04-17 16:53

我知道在 OpenCV 中有类似 Matlab 和 matplotlib 的颜色映射 。文档里讲了怎么在 C++ 中使用这个功能。我在想,使用 cv2 的 Python 里有没有类似的选项。我搜索了很多,但没有找到。我知道 matplotlib 有颜色映射的选项可以用,但如果 cv2 也提供这样的功能,那我就可以省去把 matplotlib 的颜色映射转换成 OpenCV 图像的麻烦。这实在是太麻烦了。我需要这个功能来做我的项目。

4 个回答

1

很遗憾,OpenCV没有现成的颜色映射功能,但你可以自己写一个。其实并不难。

class ColorMap:
    startcolor = ()
    endcolor = ()
    startmap = 0
    endmap = 0
    colordistance = 0
    valuerange = 0
    ratios = []    

    def __init__(self, startcolor, endcolor, startmap, endmap):
        self.startcolor = np.array(startcolor)
        self.endcolor = np.array(endcolor)
        self.startmap = float(startmap)
        self.endmap = float(endmap)
        self.valuerange = float(endmap - startmap)
        self.ratios = (self.endcolor - self.startcolor) / self.valuerange

    def __getitem__(self, value):
        color = tuple(self.startcolor + (self.ratios * (value - self.startmap)))
        return (int(color[0]), int(color[1]), int(color[2]))
2

真可惜,看起来这个功能还没有加入到Python的接口里。不过你可以去看看在modules/contrib/src/colormap.cpp里的实现,比如说jetmap其实就是一个查找表,你可以直接拿来用。

17

对于OpenCV 2.4.11版本,applyColorMap在Python中是可以使用的(尽管2.4.11的文档里只提到了C++):

import cv2
im = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
imC = cv2.applyColorMap(im, cv2.COLORMAP_JET)

另外,可以参考这个Stack Overflow的回答

撰写回答