如何在Python OpenCV中显示彩色的Y、Cb、Cr通道?
如何将YCrCb的Cr/Cb通道以彩色形式显示?
单独显示分离后的Cr、Cb通道时,OpenCV会把它们当作单通道灰度图渲染,因为缺少另外两个分量的信息。要实现彩色显示,需要将目标通道与固定的基准分量组合,再转回BGR格式:
- 对于Cr通道:固定Y分量为中间亮度值(128,对应YCrCb亮度范围的中点),Cb分量也设为128,将三个分量重新合并为YCrCb图像后转成BGR显示。
- 对于Cb通道:固定Y分量为128,Cr分量设为128,同样合并后转BGR显示。
完整代码示例:
import cv2 import numpy as np # 读取目标图像 img = cv2.imread("your_image_path.jpg") # 转换为YCrCb色彩空间 imgYCrCB = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) Y, Cr, Cb = cv2.split(imgYCrCB) # 创建固定值的基准分量(128为YCrCb亮度范围中间值) height, width = Y.shape Y_base = np.full((height, width), 128, dtype=np.uint8) Cb_base = np.full((height, width), 128, dtype=np.uint8) Cr_base = np.full((height, width), 128, dtype=np.uint8) # 生成Cr通道的彩色显示图 cr_color = cv2.merge([Y_base, Cr, Cb_base]) cr_color_bgr = cv2.cvtColor(cr_color, cv2.COLOR_YCrCb2BGR) # 生成Cb通道的彩色显示图 cb_color = cv2.merge([Y_base, Cr_base, Cb]) cb_color_bgr = cv2.cvtColor(cb_color, cv2.COLOR_YCrCb2BGR) # 展示结果 cv2.imshow("Y (Grayscale)", Y) cv2.imshow("Cr (Color)", cr_color_bgr) cv2.imshow("Cb (Color)", cb_color_bgr) cv2.waitKey(0) cv2.destroyAllWindows()
原理说明
YCrCb色彩空间中,Y代表亮度信息,Cr、Cb代表色度分量。单独的Cr/Cb只包含色度差异,没有亮度维度的信息,因此默认显示为灰度。固定Y为中间值后,色度的差异会直接映射为彩色表现,能直观看到Cr/Cb通道的色彩分布特征。
内容的提问来源于stack exchange,提问作者AMINE DZ
相关产品推荐
相关产品推荐

