注意

这是最新开发分支配套的文档,可能包含已发布版本中尚未提供的功能。如果您要查看特定版本的文档,请使用左侧的下拉菜单并选择所需要的版本。

NONAI2D CSC 模块 API 手册#

概述#

K230芯片内置24个硬件色彩空间转换(CSC)通道,能够高效地进行图像色彩空间转换处理。该模块支持多种图像格式转换,包括RGB/YUV等常见格式,适用于视频处理、图像显示等场景。

API 参考#

构造函数#

功能 初始化CSC转换通道。通道号由系统自动分配,无需用户指定。

语法

from nonai2d import CSC
csc = CSC(fmt, max_width=1920, max_height=1080, buf_num=2)

参数说明

参数

类型

说明

默认值

fmt

int

目标图像格式(见常量定义)

max_width

int

支持处理的最大图像宽度(像素)

1920

max_height

int

支持处理的最大图像高度(像素)

1080

buf_num

int

分配的VB缓冲区数量,影响处理性能

2

返回值 成功返回CSC对象,失败抛出异常

重要说明

  1. 通道号由系统自动分配(0-23范围内),用户无需也无法指定

  2. 建议根据实际图像尺寸设置max_width/max_height以节省内存

  3. fmt=PIXEL_FORMAT_GRAYSCALE 时,内部会先转换为 YUV420SP 再提取灰度通道

属性

属性名

类型

描述

chn

int

系统分配的 CSC 通道号

dst_fmt

int

目标图像格式

convert方法#

功能 执行图像色彩空间转换

语法

result = csc.convert(frame, timeout_ms=1000, cvt=True)

参数说明

参数

类型

说明

默认值

frame

py_video_frame_info

输入图像帧(Sensor.snapshot获取)

timeout_ms

int

转换超时时间(毫秒)

1000

cvt

bool

True返回Image对象,False返回py_video_frame_info

True

返回值 根据cvt参数返回转换后的Image对象或py_video_frame_info

get_frame方法#

功能 从CSC通道获取转换后的帧(低级别接口,不自动转换为Image)。

语法

frame = csc.get_frame(timeout_ms=1000)

参数说明

参数

类型

说明

默认值

timeout_ms

int

超时时间(毫秒)

1000

返回值 成功返回 py_video_frame_info 对象,超时返回 None

注意:使用 get_frame 获取的帧需要手动调用 release_frame 释放。

release_frame方法#

功能 释放通过 get_frame 获取的帧。

语法

csc.release_frame(frame)

参数说明

参数

类型

说明

frame

py_video_frame_info

需要释放的帧对象

destroy方法#

功能 释放CSC通道资源

语法

csc.destroy()

说明 调用后将释放该CSC通道占用的所有资源,不可再使用该对象

常量定义#

图像格式常量#

常量名称

说明

典型应用场景

PIXEL_FORMAT_GRAYSCALE

灰度图像格式

黑白图像处理

PIXEL_FORMAT_RGB_565

RGB565格式(大端)

LCD显示

PIXEL_FORMAT_RGB_565_LE

RGB565格式(小端)

特殊显示设备

PIXEL_FORMAT_BGR_565

BGR565格式(大端)

OpenCV兼容处理

PIXEL_FORMAT_BGR_565_LE

BGR565格式(小端)

特殊显示设备

PIXEL_FORMAT_RGB_888

RGB888格式

高质量图像处理

PIXEL_FORMAT_BGR_888

BGR888格式

OpenCV兼容处理

PIXEL_FORMAT_ARGB_8888

ARGB8888格式(带透明度)

图形界面合成

PIXEL_FORMAT_ARGB_1555

ARGB1555格式(带透明度)

低色彩深度UI

PIXEL_FORMAT_ARGB_4444

ARGB4444格式(带透明度)

低色彩深度UI

PIXEL_FORMAT_BGR_888_PLANAR

BGR888平面格式

专业图像处理

PIXEL_FORMAT_RGB_888_PLANAR

RGB888平面格式

专业图像处理

PIXEL_FORMAT_YVU_PLANAR_420

YVU420平面格式

视频解码输出

PIXEL_FORMAT_YUV_SEMIPLANAR_420

YUV420半平面格式

视频编码输入

PIXEL_FORMAT_YVU_SEMIPLANAR_420

YVU420半平面格式

视频处理

PIXEL_FORMAT_YVU_PLANAR_444

YVU444平面格式

高质量视频处理

PIXEL_FORMAT_YUV_PACKAGE_444

YUV444打包格式

高质量视频处理

PIXEL_FORMAT_YUV_SEMIPLANAR_444

YUV444半平面格式

高质量视频处理

PIXEL_FORMAT_YVU_SEMIPLANAR_444

YVU444半平面格式

高质量视频处理

最佳实践#

import time, os, urandom, sys

from media.display import *
from media.media import *
from media.uvc import *

from nonai2d import CSC

DISPLAY_WIDTH = ALIGN_UP(800, 16)
DISPLAY_HEIGHT = 480

# hardware Color Space Converter (通道号自动分配)
csc = CSC(CSC.PIXEL_FORMAT_RGB_565)

# use lcd as display output
Display.init(Display.ST7701, width = DISPLAY_WIDTH, height = DISPLAY_HEIGHT, to_ide = True)

while True:
    plugin, dev = UVC.probe()
    if plugin:
        print(f"detect USB Camera {dev}")
        break
    time.sleep_ms(100)

mode = UVC.video_mode(640, 480, UVC.FORMAT_MJPEG, 30)

succ, mode = UVC.select_video_mode(mode)
print(f"select mode success: {succ}, mode: {mode}")

UVC.start(cvt = True)

clock = time.clock()

while True:
    clock.tick()

    img = UVC.snapshot()
    if img is not None:
        img = csc.convert(img)
        Display.show_image(img)

    print(clock.fps())

# deinit display
Display.deinit()
csc.destroy()
UVC.stop()

time.sleep_ms(100)
评论列表
条评论
登录