热成像?Y成像!海思平台IVE伪彩映射实战

热成像?Y成像!海思平台IVE伪彩映射实战 UncleRoderick 2026-02-18 08:02:51 12

热成像?Y成像!海思平台 IVE 伪彩映射实战

摘要:买不起几万块的热成像仪?没关系,我们有海思开发板!本文教你如何利用 SS928V100 的 IVE 硬件加速引擎,把平平无奇的 YUV 灰度图,瞬间变成科幻感十足的“伪热成像”画面。零 CPU 占用,满帧运行,带你领略“Y 成像”的魅力!


1. 什么是“Y 成像”?(强行借概念)

大家对热成像都不陌生,原理简单说就是:传感器捕捉红外辐射 -> 转成温度数据 -> 映射到 0~255 的灰度值 -> 查表(ColorMap) -> 变成彩色的热力图。

那我们在做海思视频开发时,手里的 YUV 数据里的 Y 分量(Luma) 是什么?

  • 它也是单通道!
  • 它也是 8 位(0~255)!
  • 它代表了亮度(能量)!

兄弟们,这不就是“可见光波段的热成像”吗?我们姑且称之为“Y 成像”!

只要我们能把这个 Y 分量拿出来,像热成像一样给它套上一个炫酷的滤镜(查找表),原本黑白的夜视画面瞬间就能变成《铁血战士》里的红外视觉!

!(想象一下:原本黑白的监控画面,变成了红蓝相间的热力图,B 格瞬间拉满)


2. 为什么要用 IVE?(拒绝 CPU 99%)🚀

在 PC 上做伪彩映射,写个 for 循环遍历 1920x1080 个像素,查个表,CPU 也就笑一笑。 但在嵌入式板子上,如果你试图用 CPU 去搬运和计算 4K 分辨率的像素点,你的 CPU 占用率会直接飙红,甚至导致视频卡顿。

这时候,海思闲置的核弹——IVE(Intelligent Video Engine)就该登场了。

我们的 XVP_PSEUDO 库使用了 IVE 的两大神技:

  1. IVE MAP(映射):硬件查表。给它一张灰度图,给它 R/G/B 三个查找表,它吐给你三张 R/G/B 的分量图。
  2. IVE CSC(色彩空间转换):硬件转换。把上面的 R/G/B 图扔进去,它直接吐给你标准的 YUV420SP 图像,可以直接送显或编码。

全流程零 CPU 拷贝,零 CPU 计算!

核心处理流程图

3. XVP_PSEUDO库实战解析 🛠️

为了让大家少掉几根头发,我把复杂的 IVE 操作封装成了 libxvp_pseudo.a。以下是核心 API 的“使用说明书”。

3.1 核心 API 速览

xvp_pseudo_process.h 中,你只需要关注这几个家伙:

  • xvp_pseudo_process_init(type):
    • 作用:初始化库,申请 LUT 内存,向 XPROC 注册(后面会说)。
    • 参数XVP_COLORMAP_JET (经典的蓝红热力图) 或其他 20+ 种风格。
  • xvp_pseudo_process_create_u8c3planar_image(...):
    • 作用:申请那块“中间态 RGB”的物理内存。
    • 注意:这块内存不小(分辨率 x3),别在 while 循环里申请释放哦,由于 MMZ 很宝贵,建议程序启动时申请一次。
  • xvp_pseudo_process_frame_add_pseudo(src, tmp, dst):
    • 作用:魔法发生的地方。把源帧扔进去,带颜色的帧吐出来。
    • 特点:阻塞调用,内部会等 IVE 跑完才返回。

3.2 伪彩风格全家桶

库里内置了 OpenCV 同款色盘:AUTUMN, JET, RAINBOW, OCEAN, SUMMER, COOL, HOT… 甚至还有 TURBO(谷歌改进的更平滑的伪彩)。 如果不满意,还预留了 USER0~2 三个位置给你上传自己的数据表!


4. 实战 Sample:给 H.265 解码器加点料 📺

光说不练假把式。我们基于海思标准的 VDEC Sample 撸了一个 sample_pseudo.c。 它的工作流是: 读取 H265 文件 -> VDEC 解码 -> VPSS 缩放 -> Pseudo Thread (伪彩处理) -> VO 显示

让我们看看核心线程 xvp_pseudo_thread 是怎么工作的(代码精简版):

static td_void *xvp_pseudo_thread(td_void *arg)
{
    // ... 变量定义 ...

    // 1. 准备中间内存 (RGB Planar),别忘了这步!
    // 这里的 frame_image 就是专门给 IVE 存放查表后的 RGB 数据的
    ret = xvp_pseudo_process_create_u8c3planar_image(&frame_image);

    // 2. 初始化库,默认先来个秋天风格 (AUTUMN)
    ret = xvp_pseudo_process_init(XVP_COLORMAP_AUTUMN);

    while (pseudo_start) {
        // 3. 从 VPSS 拿原始灰度/彩色帧
        ss_mpi_vpss_get_chn_frame(src_grp, src_chn, &src_frame, milli_sec);

        // [骚操作]:每 60 帧自动换一种颜色风格,仿佛在迪厅
        if (time_ref % 60 == 0) {
            pseudo_index++;
            xvp_pseudo_process_set_pseudo_type((pseudo_type_e)pseudo_index);
        }

        // 4. 执行伪彩映射!(Src -> Dst)
        // 注意:src_frame 和 dst_frame 必须分辨率一致
        ret = xvp_pseudo_process_frame_add_pseudo(&src_frame, &frame_image, &dst_frame);

        // 5. 把处理好的“热成像”送给 VO 去显示
        ss_mpi_vpss_send_frame(dst_grp, &dst_frame, milli_sec);

        // 6. 释放原始帧
        ss_mpi_vpss_release_chn_frame(src_grp, src_chn, &src_frame);
    }

    // ... 资源回收 ...
}

关键点:

  • 双 VPSS 组玩法:Sample 中使用了两个 VPSS Group。
    • Group 0:负责接收解码数据,缩放到指定大小。
    • Group 1:负责接收伪彩处理后的数据,送给 VO。
    • 我们的线程就像一个搬运工,从 Grp0 搬到 Grp1,顺便给画面“上个色”。

操作流程:

①.确保依赖的驱动文件、sample程序以及解码原文件已经准备好

#解码源文件需从SDK的以下目录复制:
SS928V100_SDK_V2.0.2.2/smp/a55_linux/mpp/sample/vdec/source_file/

②.运行sample_xvp_pseudo后,可执行命令cat /proc/XPROC/module查看库版本信息

③.性能开销

sample_xvp_pseudo实际运行解码4K50帧场景。

此时伪彩处理能达到50FPS满帧。

基于此场景下的CPU开销,主要为解码文件拷贝的CPU占用,伪彩处理基本不占用CPU。


5. 特别注意:关于 XPROC 框架 ⚠️

细心的朋友可能发现了,代码里有一句:

#include "xproc/xproc_driver_uapi.h"

并且在 init 函数里调用了 xproc_device_register_module_once

这是我们的秘密武器——XPROC 框架。 这个库依赖于 xproc 驱动来管理模块信息和调试接口。在运行 Sample 之前,请务必确保你的板子上已经加载了 xproc.ko,并且 /dev/xproc 节点是可用的。

如果初始化报错 Register module failed,请先检查一下驱动是否“发车”了。


6. 总结

通过 XVP_PSEUDO 库,我们在海思 SS928V100 平台上轻松实现了高性能的伪彩映射。无论是做夜视仪、工业测温模拟,还是单纯为了让监控画面看起来更酷炫,这个方案都能满足你。

XPROC 框架地址:

https://gitee.com/uncleroderick/XPROC_Release

XVP_PSEUDO Sample地址:

https://gitee.com/uncleroderick/SS928V100_SDK_V2.0.2.2_Open_Source_MPP_Sample

直接git clone代码,执行make xvp_pseudo即可在bin目录生成sample_xvp_pseudo

快去试试吧,把你的摄像头变成“Y 成像仪”!😎


Copyright (c) 2026 UncleRoderick. All rights reserved.

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
UncleRoderick
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区