Python OpenCV实现逐通道显示图像及对应像素值的代码方案

Python+OpenCV 逐通道像素值展示实现
以下代码完全基于OpenCV实现,可拆分图像BGR三个通道,以网格形式展示每个像素位置的数值,效果和参考图一致。
完整代码
import cv2 import numpy as np def show_channel_pixel_values(img, cell_size=40): """ 逐通道展示图像像素值 :param img: 输入三通道BGR格式图像(OpenCV默认读取格式) :param cell_size: 单个像素对应的展示格子边长,单位:像素 """ h, w = img.shape[:2] # 拆分BGR三通道 b_channel, g_channel, r_channel = cv2.split(img) channel_list = [ ("Blue Channel", b_channel), ("Green Channel", g_channel), ("Red Channel", r_channel) ] show_canvases = [] def draw_channel(channel_data, title): # 创建单通道展示画布,白色背景,顶部预留标题区域 canvas_h = h * cell_size + 60 canvas_w = w * cell_size canvas = np.ones((canvas_h, canvas_w, 3), dtype=np.uint8) * 255 # 绘制通道标题 cv2.putText(canvas, title, (10, 40), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,0,0), 2) # 遍历绘制网格与像素值 for i in range(h): for j in range(w): val = int(channel_data[i, j]) # 计算单个像素格子的坐标 x1 = j * cell_size y1 = 60 + i * cell_size x2 = (j+1) * cell_size y2 = 60 + (i+1) * cell_size # 绘制格子边框 cv2.rectangle(canvas, (x1, y1), (x2, y2), (0,0,0), 1) # 居中绘制像素数值 text = str(val) text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0] text_x = int(x1 + (cell_size - text_size[0])/2) text_y = int(y1 + (cell_size + text_size[1])/2) cv2.putText(canvas, text, (text_x, text_y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,0,0), 1) return canvas # 生成三个通道的单独展示图 for channel_name, channel_data in channel_list: show_canvases.append(draw_channel(channel_name, channel_name)) # 横向拼接三个通道的展示结果 final_show = np.hstack(show_canvases) # 弹窗展示 cv2.imshow("Pixel Values per Channel", final_show) cv2.waitKey(0) cv2.destroyAllWindows() # 调用示例 if __name__ == "__main__": # 替换为本地图像路径 img = cv2.imread("test.png") # 大尺寸图像建议先缩放至合适大小,避免展示窗口超出屏幕 # img = cv2.resize(img, (5,5)) # 小尺寸测试效果和参考图完全匹配 show_channel_pixel_values(img, cell_size=40)
使用说明
- 先安装依赖:执行
pip install opencv-python numpy完成环境准备 - 将代码中
cv2.imread的路径替换为目标图像本地路径,初次测试建议用33、55这类小尺寸图像,效果和参考图一致 - 可通过修改
cell_size参数调整单个像素格子的显示大小,适配不同展示需求 - 展示窗口弹出后按任意键即可关闭
内容的提问来源于stack exchange,提问作者Arjun Goud
相关产品推荐
相关产品推荐

