ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

mmcv.visualization 可视化模块完全指南:图像、检测框与光流展示 API 详解

mmcv.visualization 可视化模块完全指南:图像、检测框与光流展示 API 详解 人工智能计算机视觉深度学习【免费下载链接】mmcvOpenMMLab Computer Vision Foundation项目地址https://gitcode.com/gh_mirrors/mm/mmcv点击查看免费下载本文以 OpenMMLab 计算机视觉基础库 mmcv 的可视化模块mmcv.visualization为主线系统讲解其在图像展示、目标检测框标注绘制与光流可视化三大场景下的全部公开 API。读者通过本文可以掌握Color颜色体系与color_val的类型统一转换机制、imshow/imshow_bboxes/imshow_det_bboxes的完整参数用法与实战代码以及flowshow/flow2rgb/make_color_wheel的光流可视化原理从而在 mmcv 生态项目中快速实现结果可视化与调试输出。模块总览一条 import 拿到全部可视化能力mmcv.visualization是 mmcv 中负责把数据画出来的独立子包其公开接口集中定义在 mmcv/visualization/init.py 中共导出 8 个成员按功能划分为三组分组导出成员职责Color颜色Color、color_val预定义常用颜色枚举以及把多种颜色输入统一转换为 BGR 三元组Image图像imshow、imshow_bboxes、imshow_det_bboxes显示图像、绘制普通边界框、绘制带类别与置信度的检测框Optical Flow光流flowshow、flow2rgb、make_color_wheel将光流场转换为伪彩色图并展示、构造 Middlebury 风格颜色轮使用时只需一行导入即可访问全部接口import mmcv # 颜色 mmcv.color_val(green) # - (0, 255, 0) # 图像 mmcv.imshow(a.jpg) # 光流 flow mmcv.flowread(test.flo) mmcv.flowshow(flow)官方入门文档 docs/zh_cn/understand_mmcv/visualization.md 也明确说明mmcv 可以展示图像以及标注目前标注只支持边界框同时可以展示光流这类特殊图像。本文即基于该模块源码与其对应 API 参考文档展开深入讲解。Color统一的颜色定义与转换入口颜色管理是可视化模块的地基——无论是画框、写文字还是生成伪彩色图都需要先把各种形式传入的颜色规范化为统一的 BGR 三元组。mmcv 在 mmcv/visualization/color.py 中提供了Color枚举与color_val函数两个工具。Color 枚举8 种预定义常用色Color是一个继承自 PythonEnum的枚举类定义了 8 种常用颜色。需要特别注意的是这些值是 BGR 通道顺序与 OpenCV / mmcv 的图像通道约定一致而不是常见的 RGB 顺序from mmcv.visualization import Color Color.red # (0, 0, 255) —— BGR 下红色是第三通道为 255 Color.green # (0, 255, 0) Color.blue # (255, 0, 0) Color.cyan # (255, 255, 0) Color.yellow # (0, 255, 255) Color.magenta # (255, 0, 255) Color.white # (255, 255, 255) Color.black # (0, 0, 0)color_val五种输入类型的统一转换color_val(color)的签名与转换规则在源码中有严格定义其输入可以是Color枚举、字符串、三元组、整数或 numpy 数组输出永远是3 个 0~255 的整数构成的 BGR 通道元组输入类型转换规则校验约束str以字符串作为枚举名执行Color[color].value查找必须是Color的成员名如green大小写敏感Color直接取枚举成员.value必须是Color类型tuple原样返回长度必须为 3且每个通道都在 0~255 之间int展开为(color, color, color)灰阶值数值必须在 0~255 之间np.ndarray转 uint8 后再转 tuple必须是一维且size 3所有元素在 0~255 之间其他类型抛出TypeError例如 list、float 均不支持对应源码位于 mmcv/visualization/color.py其行为已被单元测试 tests/test_visualization.py 逐一验证assert mmcv.color_val(mmcv.Color.blue) (255, 0, 0) assert mmcv.color_val(green) (0, 255, 0) assert mmcv.color_val((1, 2, 3)) (1, 2, 3) assert mmcv.color_val(100) (100, 100, 100) assert mmcv.color_val(np.zeros(3, dtypeint)) (0, 0, 0) # 非法输入会抛错 with pytest.raises(TypeError): mmcv.color_val([255, 255, 255]) # list 不支持 with pytest.raises(TypeError): mmcv.color_val(1.0) # float 不支持 with pytest.raises(AssertionError): mmcv.color_val((0, 0, 500)) # 通道越界因此在imshow_bboxes、imshow_det_bboxes等函数中bbox_color/text_color/colors参数都接受字符串、枚举、元组、整数、ndarray中的任意一种最终统一交给color_val规范化使用起来非常灵活。Image图像展示与边界框绘制图像可视化部分包含三个函数均定义在 mmcv/visualization/image.py底层复用mmcv.image的imread读取/透传图像与imwrite写出图像能力见 mmcv/image/io.py。imshow单窗口图像展示imshow(img, win_name, wait_time0)是最基础的展示接口接受图像路径str或已加载的ndarray两种输入。内部执行cv2.imshow(win_name, imread(img))并针对wait_time有两种行为wait_time 0默认进入循环持续刷新窗口直到用户按下任意键或手动关闭窗口才退出——源码通过cv2.getWindowProperty(win_name, cv2.WND_PROP_VISIBLE) 1检测窗口是否已被关闭避免窗口关闭后程序无限挂起wait_time 0仅调用cv2.waitKey(wait_time)等待指定毫秒数。典型用法来自 docs/zh_cn/understand_mmcv/visualization.md# 直接展示图像文件 mmcv.imshow(a.jpg) # 展示已加载到内存的图像 img np.random.rand(100, 100, 3) mmcv.imshow(img) # 指定窗口名等待 500 毫秒后自动关闭 mmcv.imshow(a.jpg, win_namedemo, wait_time500)imshow_bboxes在图像上绘制一组或多组边界框imshow_bboxes(img, bboxes, colorsgreen, top_k-1, thickness1, showTrue, win_name, wait_time0, out_fileNone)用于绘制纯框不区分类别完整参数说明如下参数类型默认值说明imgstr/ndarray必填图像路径或已加载图像bboxeslist/ndarray必填边界框列表其中每个元素是形状为(k, 4)的数组x1, y1, x2, y2colorsColorType/ 列表green单色或与bboxes等长的颜色列表每组框使用一个颜色top_kint-1若为正数每组框只绘制前top_k个thicknessint1线条粗细showboolTrue是否弹出窗口展示win_namestr窗口名wait_timeint0同imshow的等待语义out_filestrNone非空时把绘制结果写盘源码实现要点mmcv/visualization/image.py传入单个ndarray时会自动包装为[bboxes]传入单一颜色非 list时会按bboxes的组数复制为等长颜色列表随后逐一通过color_val规范化每组的每个框都以(x1, y1)为左上角、(x2, y2)为右下角调用cv2.rectangle绘制函数最终返回绘制后的图像数组因此既可以showTrue交互查看也可以链式保存。img np.random.rand(100, 100, 3) bboxes np.array([[0, 0, 50, 50], [20, 20, 60, 60]]) mmcv.imshow_bboxes(img, bboxes) # 多组框、多颜色并保存结果 mmcv.imshow_bboxes( a.jpg, [np.array([[10, 10, 80, 80]]), np.array([[30, 30, 90, 90]])], colors[red, blue], thickness2, showFalse, out_fileoutput.jpg)imshow_det_bboxes绘制带类别标签与置信度的检测框imshow_det_bboxes是面向目标检测结果的高级接口除了画框还会在框左上角写出类别名可选置信度分数其完整签名与参数为参数类型默认值说明imgstr/ndarray必填图像路径或已加载图像bboxesndarray必填形状(n, 4)或(n, 5)(n, 5)时最后一列为置信度分数labelsndarray必填长度n的类别索引与bboxes一一对应class_nameslist[str]None类别名列表为None时文字退化为cls {label}score_thrfloat0置信度阈值只展示分数大于该值的框要求 bboxes 为(n, 5)bbox_colorColorTypegreen框线颜色text_colorColorTypegreen文字颜色thicknessint1线条粗细font_scalefloat0.5文字缩放showboolTrue是否窗口展示win_namestr窗口名wait_timeint0等待语义同imshowout_filestrNone非空时写盘源码实现要点mmcv/visualization/image.py入口处有 4 个断言bboxes必须是二维、labels必须是一维、两者行数相等、且bboxes列数只能是 4 或 5当score_thr 0时强制要求bboxes.shape[1] 5取最后一列分数做掩码过滤同步过滤labels标签文字格式有class_names时取class_names[label]否则写cls {label}若 bbox 带分数还会追加|{score:.02f}例如cat|0.98文字使用cv2.putTextFONT_HERSHEY_COMPLEX字体绘制在框左上角上方 2 像素处同imshow_bboxes一样返回绘制后的图像数组。img mmcv.imread(a.jpg) bboxes np.array([[10, 10, 80, 80, 0.98], [100, 100, 200, 200, 0.76]]) labels np.array([0, 1]) class_names [cat, dog] # 只展示置信度高于 0.8 的框 mmcv.imshow_det_bboxes( img, bboxes, labels, class_namesclass_names, score_thr0.8, bbox_colorred, text_coloryellow, thickness2, font_scale0.6, out_filedet_result.jpg)Optical Flow光流场的伪彩色可视化光流是视频/运动分析中的核心数据形态本质是一个(H, W, 2)数组每个像素存 dx、dy 两个位移分量无法直接用灰度图展示。mmcv 通过颜色轮color wheel编码方案将位移方向映射为色相、位移幅度映射为亮度得到人类可读的伪彩色图。这一组接口位于 mmcv/visualization/optflow.py。flowshow一键展示光流flowshow(flow, win_name, wait_time0)接受光流数组或光流文件路径内部处理链为调用mmcv.video.flowread读取/校验光流为(H, W, 2)数组调用flow2rgb转换为 RGB 伪彩色图通过rgb2bgr转回 BGR 通道顺序与imshow的约定一致复用imshow进行窗口展示。flow2rgb光流场 → RGB 伪彩色图flow2rgb(flow, color_wheelNone, unknown_thr1e6)是核心转换函数参数含义flow形状必须为(H, W, 2)的浮点光流数组color_wheel可选自定义颜色轮(N, 3)的 float 数组不传则自动调用make_color_wheel()生成默认颜色轮unknown_thr位移绝对值超过该阈值的像素视为未知区域在结果中被置黑同时 NaN 像素也会被忽略默认1e6。其算法流程mmcv/visualization/optflow.py可归纳为四步标记无效像素dx、dy中存在 NaN 或绝对值超过unknown_thr的像素被记录到ignore_inds并临时置零幅度归一化计算每点幅值rad sqrt(dx^2 dy^2)若存在非零幅值则整体除以最大幅值max_rad把幅值压缩到[0, 1]方向映射用angle arctan2(-dy, -dx) / pi把方向角归一到[-1, 1]再线性映射到颜色轮的 bin 区间并在相邻两个 bin 之间做线性插值得到平滑的色相过渡幅度调制亮度幅值 1的像素向白色(1,1,1)混合使小位移呈现接近白色的淡色幅值大于 1 的像素颜色整体乘以0.75变暗从而用明暗表达位移大小最后把ignore_inds对应的像素置为黑色。最终返回一个可直接展示的 RGBndarray。make_color_wheel构造 Middlebury 风格颜色轮make_color_wheel(binsNone)生成光流可视化所用的颜色轮。bins是一个长度为 6 的列表/元组指定六个色相区段红→黄、黄→绿、绿→青、青→蓝、蓝→品红、品红→红各自包含的 bin 数量默认值为[15, 6, 4, 11, 13, 6]即 Middlebury 光流评测数据集使用的经典配置。函数按顺序拼接 6 段渐变返回形状为(total_bins, 3)的float32数组total_bins为各段 bin 数之和默认配置下为 55。from mmcv.visualization import make_color_wheel, flow2rgb wheel make_color_wheel() # 默认 Middlebury 配置 my_wheel make_color_wheel([10, 8, 6, 10, 10, 8]) # 自定义各段 bin 数 rgb flow2rgb(flow, color_wheelmy_wheel) # 使用自定义颜色轮转换光流数据的读取与格式flowshow支持直接传入文件路径这依赖mmcv.video.flowreadmmcv/video/optflow.py。标准.flo文件格式为4 字节魔数PIEHASCII、宽w与高h各 4 字节 int32、随后是w * h * 2个 float32 位移分量最终 reshape 为(h, w, 2)。flowread会校验魔数与形状非法文件会抛出OSError如果传入的是已加载的 ndarray则直接校验后返回。此外它还支持quantizeTrue读取经量化编码为 JPEG 的光流dx、dy 拼接图由dequantize_flow还原。一个完整的可视化链路示例import mmcv # 方式一从 .flo 文件读取并展示 flow mmcv.flowread(test.flo) mmcv.flowshow(flow) # 方式二直接对 (H, W, 2) 数组转换并保存伪彩色图 rgb mmcv.flow2rgb(flow) mmcv.imwrite(mmcv.rgb2bgr(rgb), flow_vis.jpg)说明仓库测试数据中提供了示例光流文件tests/data/optflow.flo及配套的可视化样例可用于快速验证上述流程。实战注意事项结合源码与测试可以总结出以下使用要点通道顺序是 BGRmmcv 图像体系遵循 OpenCV 的 BGR 约定Color.red的值为(0, 0, 255)flow2rgb产出的伪彩色图是 RGB 顺序flowshow内部会自行转回 BGR但若自行保存伪彩色图记得像上面的示例那样调用rgb2bgr转换否则颜色会错乱。颜色输入越灵活越要警惕类型color_val不接受 list 与 float字符串必须是Color枚举成员名tuple 与 ndarray 的通道值必须在 0~255 内否则触发断言。imshow系列依赖图形环境cv2.imshow需要可用的显示环境X11/桌面会话。在无头服务器上应使用showFalse并配合out_file将结果写盘或改用mmcv.imwrite落盘后离线查看。检测框输入形状约束imshow_det_bboxes要求bboxes为(n, 4)或(n, 5)且labels与bboxes行数一致只有(n, 5)才能启用score_thr过滤。wait_time0会阻塞等待交互默认值下窗口会一直刷新直到按下任意键或关闭窗口脚本化批量可视化时建议显式传入非零wait_time。源码与测试索引模块入口与导出清单mmcv/visualization/init.py颜色定义与转换mmcv/visualization/color.py图像展示与框绘制mmcv/visualization/image.py光流可视化实现mmcv/visualization/optflow.py光流读写与量化mmcv/video/optflow.py图像读写底层依赖mmcv/image/io.py单元测试覆盖颜色转换的合法/非法输入tests/test_visualization.py入门教程示例docs/zh_cn/understand_mmcv/visualization.md以上接口共同构成了 mmcv 轻量、统一的数据 → 可视化工具链颜色层负责类型收敛图像层负责常见 CV 标注渲染光流层负责非 RGB 数据的伪彩色编码。在 OpenMMLab 系列项目的调试、结果导出与论文配图场景中它们都是开箱即用的基础组件。赞分享人工智能计算机视觉深度学习【免费下载链接】mmcvOpenMMLab Computer Vision Foundation项目地址https://gitcode.com/gh_mirrors/mm/mmcv点击查看免费下载相关推荐mmcv 可视化 API 完全指南图像、目标检测框与光流可视化实战mmcv 可视化 API 完全指南图像、目标检测框与光流可视化实战 mmcv.visualization 是 OpenMMLab 计算机视觉基础库中负责结果可人工智能计算机视觉深度学习torchvision.utils 可视化工具详解make_grid、检测框、分割掩码、关键点与光流绘制torchvision.utils 可视化工具详解make_grid、检测框、分割掩码、关键点与光流绘制 torchvision.utils 是 TorchV计算机视觉深度学习图像处理数据集Apache Arrow C 分布式追踪实战OpenTelemetry 集成与 Jaeger 可视化Apache Arrow C 分布式追踪实战OpenTelemetry 集成与 Jaeger 可视化 导读 Apache Arrow C 内部对核心执人工智能计算机视觉深度学习上一篇Kubernetes Python 客户端 asyncio 模型包kubernetes.aio.client.models全解析从 767 个数据模型到 pydantic 序列化机制下一篇PHPMailer核心源码解析从SMTP协议实现到MIME邮件构建创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表