我有一个带有灰度图像的 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)。
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)
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)
将 cv2 导入为 cv
im = cv2.imread("花.jpg")
gray_scale = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.applyColorMap(gray_scale, cv2.COLORMAP_JET)
可用的颜色图: 在此输入图片描述