当前位置: 首页 > news >正文

【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能

【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能

  • 一,文档简介
  • 二,RT1170 CSI Y8黑白格式配置与测试
    • 2.1 软硬件情况
    • 2.2 Y8黑白格式的具体配置
    • 2.3 测试结果

一,文档简介

RT1170的CSI可以支持YUV格式,所谓的YUV分为三个分量:Y表示亮度(Luminance),即灰度值;UV表示色度(Chrominance),描述色度和饱和度。和RGB类似,YUV也是一种颜色编码方法,它可以把亮度信息Y与色度信息UV分离。如果要显示黑白,可以没有UV信息,只有Y信息,即Y800=Y8 ,也同样可以显示完整的图像。对于RT1170 YUV,官方SDK提供了基于YUV444格式的例程,但是在实际使用中,有些客户需要Y8格式的功能,那么应该如何基于现有的YUV SDK去做配置呢?
从RT1170的参考手册,可以看到如下信息:
在这里插入图片描述

图 1
该描述,可以理解为需要Y8模式,只要配置:

CSI_CR20[BINARY_EN]=0
CSI_CR20[BIG_END]=1

但是,实际通过这种配置,原本的YUV代码无法显示摄像头数据了,那么到底应该怎样做摄像头的Y8配置,才能通过LCD显示出黑白的图像呢?本文将会给出详细讲解。

二,RT1170 CSI Y8黑白格式配置与测试

2.1 软硬件情况

板子:MIMXRT1170-EVK REV C4
LCD: RK055AHD091
摄像头:OV5640
代码:SDK_2_15_000_MIMXRT1170-EVK\boards\evkmimxrt1170\driver_examples\csi\mipi_yuv\cm7
IDE: MCUXPresso IDE v11.9.0

2.2 Y8黑白格式的具体配置

实际上,对于CSI_CR20配置,还需要使能Histogram功能,即如下几项:
在这里插入图片描述

图 2
下面给出基于SDK evkmimxrt1170_csi_mipi_yuv_cm7 demo,修改成Y8的几个修改点,主要修改文件csi_mipi_yuv.c:
(1) static void DEMO_InitPxp(void)函数
修改:

PXP_SetCsc1Mode(DEMO_PXP, kPXP_Csc1YCbCr2RGB);

为:

PXP_SetCsc1Mode(DEMO_PXP, kPXP_Csc1YUV2RGB);

此项如果不改,LCD将会全部显示为绿色。
(2)static void DEMO_InitCamera(void)函数
在BOARD_InitMipiCsi();之前,添加代码:

CSI->CR20 |= CSI_CR20_QRCODE_EN_MASK | CSI_CR20_HISTOGRAM_EN_MASK;

这里没有配置CSI_CR20[BINARY_EN]=0,是因为复位默认就是0,如果实际应用中,该位被修改过,那么这里就需要添加BINARY_EN清0,表示输出为Y8,不是Y1。
这里,之前不能显示图片的原因是因为HISTOGRAM_EN没有开启。
(3) static void DEMO_CSI_MIPI_YUV(void)函数
修改psBufferConfig结构体如下:

    pxp_ps_buffer_config_t psBufferConfig = {.pixelFormat = kPXP_PsPixelFormatY8, //kPXP_PsPixelFormatYUV1P444, /* Note: This is 32-bit per pixel */.swapByte    = false,.bufferAddrU = 0U,.bufferAddrV = 0U,.pitchBytes  = DEMO_CAMERA_WIDTH,//DEMO_CAMERA_WIDTH * DEMO_CAMERA_BUFFER_BPP,//
};

主要两个点:

.pixelFormat = kPXP_PsPixelFormatY8,
.pitchBytes = DEMO_CAMERA_WIDTH,

如果只是修改了像素格式为Y8,但是pitchBytes不修改成摄像头宽度,那么结果LCD显示将会是上面一小条,而不是整个LCD屏幕显示摄像头的Y8格式黑白图像。
到目前为止,所有Y8相关的修改项目已经结束。
最后,需要注意下, 默认的SDK的LCD显示屏,并不是本文选择的:RK055AHD091。
所以需要修改display_support.h中的DEMO_PANEL宏为如下内容:

#define DEMO_PANEL DEMO_PANEL_RK055AHD091

下面,编译工程,并且下载代码到MIMXRT1170-EVK板子中。

2.3 测试结果

下面使用同一张彩色的图片对着摄像头分别测试YUV以及Y8显示的效果,话不多说,直接上图。
在这里插入图片描述

左边的图片的摄像头格式是YUV444, 右边图片是Y8的格式,可以看到左边是彩色的,右边显示的就是黑白的,成功的完成了黑白Y8的摄像头数据采集以及LCD显示。
如果需要工程包的朋友,请移步NXP官方论坛:
RT1170 camera CSI Y8 format modification

相关文章:

  • 【自动驾驶】从零开始做自动驾驶小车
  • scale()函数详解
  • MySQL笔记——事务
  • 分享HTML显示2D/3D时间
  • Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决
  • [c++刷题]贪心算法.N01
  • 揭秘无局放电源:定义、工作原理及其在工业设备中的重要性
  • 鸿蒙开发:【进程模型概述】
  • PHP杂货铺家庭在线记账理财管理系统源码
  • kettle无法启动问题_PENTAHO_JAVA_HOME
  • Dify知识库接入微信
  • 解释React中的“端口(Portals)”是什么,以及如何使用它来渲染子节点到DOM树以外的部分。
  • 亚足联官方公布18强赛抽签时间及规则,国足确认位列第五档,你们觉得国足能进世界杯吗?
  • 【代码仓库提交大文件,用Git LFS!】
  • 算法训练营day66-孤岛总面积-沉没孤岛-水流问题-建造最大岛屿
  • $translatePartialLoader加载失败及解决方式
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 《剑指offer》分解让复杂问题更简单
  • 2017届校招提前批面试回顾
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular Elements 及其运作原理
  • C# 免费离线人脸识别 2.0 Demo
  • CentOS7 安装JDK
  • Effective Java 笔记(一)
  • iOS | NSProxy
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • javascript数组去重/查找/插入/删除
  • tweak 支持第三方库
  • VUE es6技巧写法(持续更新中~~~)
  • Vue.js-Day01
  • vue-cli在webpack的配置文件探究
  • 阿里研究院入选中国企业智库系统影响力榜
  • 类orAPI - 收藏集 - 掘金
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何编写一个可升级的智能合约
  • 深度学习在携程攻略社区的应用
  • 数据仓库的几种建模方法
  • 算法-插入排序
  • MyCAT水平分库
  • postgresql行列转换函数
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #职场发展#其他
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)jQuery 基础
  • *setTimeout实现text输入在用户停顿时才调用事件!*