如何用OpenCV可视化含2个颜色通道的图像数组?
解决OpenCV无法显示双通道图像的方案
1. 转单通道:逐元素平均
直接对两个通道的像素值求平均,生成单通道灰度图,就能正常用cv2.imshow显示:
import cv2 import numpy as np # 假设img是形状为(128,256,2)的输入数组 # 沿通道轴求均值,转成uint8类型(OpenCV图像的默认格式) gray_img = np.mean(img, axis=2).astype(np.uint8) cv2.imshow("Single Channel", gray_img) cv2.waitKey(0) cv2.destroyAllWindows()
如果原数组是浮点型,必须转成uint8,不然显示会出问题。
2. 直接显示双通道:补通道转三通道
OpenCV只认单通道(灰度)或三通道(BGR)图像,所以给双通道补一个全0的通道凑成三通道就能显示。比如把原有两个通道作为B、G通道,R通道补0:
import cv2 import numpy as np # 拼接一个和第一个通道形状相同的全0通道 bgr_img = np.concatenate([img, np.zeros((img.shape[0], img.shape[1], 1), dtype=img.dtype)], axis=2) cv2.imshow("3-Channel Preview", bgr_img) cv2.waitKey(0) cv2.destroyAllWindows()
你也可以自由组合通道映射,比如把第一个通道当R、第二个当G,这样能直观看出两个通道的像素差异。
另外,如果不局限于OpenCV,用Matplotlib可以直接拆分双通道分别显示:
import matplotlib.pyplot as plt plt.figure(figsize=(10,5)) plt.subplot(121) plt.imshow(img[...,0], cmap='gray') plt.title("Channel 0") plt.subplot(122) plt.imshow(img[...,1], cmap='gray') plt.title("Channel 1") plt.show()
内容的提问来源于stack exchange,提问作者Jacob Issac
相关产品推荐
相关产品推荐

