python - Opencv:Jetmap或colormap转灰度,反向applyColorMap()

标签 python opencv

要转换为颜色图,我这样做

import cv2
im = cv2.imread('test.jpg', cv2.IMREAD_GRAYSCALE)
im_color = cv2.applyColorMap(im, cv2.COLORMAP_JET)
cv2.imwrite('colormap.jpg', im_color)

然后,

cv2.imread('colormap.jpg')
# ??? What should I do here?

显然,以灰度(使用 , 0)读取它不会神奇地为我们提供灰度,那么我该怎么做呢?

最佳答案

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

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))

关于python - Opencv:Jetmap或colormap转灰度,反向applyColorMap(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51824718/

相关文章:

python - Scrapy:NameError:名称 'url'未定义

python - 我如何发送带有 python 和动态值的发布请求?

c++ - 在 Windows 窗体中捕获 openCV 视频

python - PyCrypto 生成错误的签名

python - Pycharm 预期类型 'optional[bytes]' 得到了 'str' 而不是

python - requests.session 的模拟 cookies 属性

java - 图像识别 - Mat 中的二进制描述符表示 - OpenCV Android

opencv - 针孔相机如何感知深度?

c - openCV 错误 : Assertion failed (scn == 3 || scn == 4)

python - 在 openCV 3 python 2.7 中打开 ffmpeg/mpeg-4 avi