python - Opencv:Jetmap或colormap转灰度,反向applyColorMap()
问题描述
要转换为颜色图,我会
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))
推荐阅读
- javascript - https 在 javascript 中发布类似于带有标头和参数的 curl -d 带有“请求”模块 nodejs npm
- javascript - 我有 google drive pdf 的共享链接,我必须使用 angular7 下载该 pdf。请告诉我该怎么做
- material-ui - 如何为material-ui-dropzone的容器设置样式
- python-3.x - 如何在 python 中将包含超出范围 utf-8 或 16 的字符的 unicode 字符串转换为二进制或十六进制?
- django - 如何修复Django中的自动登录?
- mongodb - 如何在 MongoDB Atlas 中获取“完整的数据库名称”?
- ionic-framework - 修复启动图像 ionic v1 后无法在 iphone x 中查看电池状态
- ubuntu - 从外部 IP 地址访问主机
- javascript - 访问 iFrame 中的数据属性?
- javascript - 从javascript中的文本文件中读取特定单词