如何使用 OpenCV 将色彩图应用于灰度数据

问题描述 投票:0回答:3

我有一个带有灰度图像的 np.array,我想应用色彩图,然后将结果保存到视频文件中。

使用这段代码(或使用注释行)我无论如何都会得到一个灰度视频。知道为什么我没有彩色图视频吗?

color_images = np.empty([N, resolution[1], resolution[0], 3])
for i in range(0, N):
    cv2.imwrite(gray_images[i])
    color_images[i] = cv2.cvtColor(np.float32(gray_images[i]), cv2.COLOR_GRAY2BGR)
    #color_images[i] = cv2.merge([gray_images[i], gray_images[i], gray_images[i]])
out = cv2.VideoWriter("video.mp4", cv2.VideoWriter_fourcc(*'mp4v'),
                      fps, (resolution[0], resolution[1]), 1)
for i in range(0, N):
    out.write(np.uint8(color_images[i]))
out.release()

更新:我想要一个彩色图像,以便像素强度的差异可以更明显。 (例如,在 plt.imshow ('viridis') 中使用默认的 cmap)。

python opencv video grayscale colormap
3个回答
2
投票

cvtColor
不这样做。对于任何灰度像素,它都会为您提供看起来具有相同强度的灰色的 RGB/BGR 像素。

如果您想要色彩图,您需要

applyColorMap

import numpy as np
import cv2 as cv

gray_image = ... # get it from somewhere

colormapped_image = cv.applyColorMap(gray_image, cv.COLORMAP_JET)

lena and COLORMAP_JET

在这里了解更多


0
投票

OpenCV (cv2) 可以将颜色图应用于图像并保存。但是,OpenCV 的颜色图函数期望图像数据为 8 位格式,因此您需要将标准化深度图缩放到范围 [0, 255] 并将其转换为 8 位格式,然后再应用颜色图。 因此,如果您有

floating point precision
数据并且您想在该数据上应用颜色图,请使用
matplotlib
。一个简单的用例

import matplotlib.pyplot as plt
import matplotlib.cm as cm

# Normalize the depth map
depth_map_normalized = np.clip(depth_map / 65000.0, 0, 1)

# Apply a colormap
depth_map_colored = cm.jet(depth_map_normalized)

# Save the result
plt.imsave('depth_map_colored.png', depth_map_colored)


0
投票

将 cv2 导入为 cv

im = cv2.imread("花.jpg")

gray_scale = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

cv2.applyColorMap(gray_scale, cv2.COLORMAP_JET)

可用的颜色图: 在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.