首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Opencv: Jetmap或colormap到灰度,反向applyColorMap()

Opencv: Jetmap或colormap到灰度,反向applyColorMap()
EN

Stack Overflow用户
提问于 2018-08-13 22:29:59
回答 1查看 8.8K关注 0票数 5

为了转换为色彩映射表,我这样做了

代码语言:javascript
复制
import cv2
im = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
im_color = cv2.applyColorMap(im, cv2.COLORMAP_JET)
cv2.imwrite('colormap.jpg', im_color)

然后,

代码语言:javascript
复制
cv2.imread('colormap.jpg')
# ??? What should I do here?

显然,用灰度(用, 0)读取它不会神奇地给出灰度,那么我该怎么做呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-13 23:32:24

您可以创建与色彩映射表相反的内容,即从色彩映射值到相关灰度值的查找表。如果使用查找表,则需要原始色彩映射表的精确值。在这种情况下,假彩色图像很可能需要以无损格式保存,以避免颜色更改。可能有一种更快的方法在numpy数组上进行映射。如果不能保留确切的值,则需要在逆映射中进行最近邻查找。

代码语言:javascript
复制
import cv2
import numpy as np

# load a color image as grayscale, convert it to false color, and save false color version    
im_gray = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('gray_image_original.png', im_gray)
im_color = cv2.applyColorMap(im_gray, cv2.COLORMAP_JET)
cv2.imwrite('colormap.png', im_color) # save in lossless format to avoid colors changing

# create an inverse from the colormap to gray values
gray_values = np.arange(256, dtype=np.uint8)
color_values = map(tuple, cv2.applyColorMap(gray_values, cv2.COLORMAP_JET).reshape(256, 3))
color_to_gray_map = dict(zip(color_values, gray_values))

# load false color and reserve space for grayscale image
false_color_image = cv2.imread('colormap.png')

# apply the inverse map to the false color image to reconstruct the grayscale image
gray_image = np.apply_along_axis(lambda bgr: color_to_gray_map[tuple(bgr)], 2, false_color_image)

# save reconstructed grayscale image
cv2.imwrite('gray_image_reconstructed.png', gray_image)

# compare reconstructed and original gray images for differences
print('Number of pixels different:', np.sum(np.abs(im_gray - gray_image) > 0))
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51824718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档