专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
OV2640转灰度图像
2019-07-20 09:50
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
10009
19
929
最近在做OV2640输出灰度图像,一直没有搞出来,不确定是YUV422格式转灰度,还是RGB565转灰度,原子哥在论坛回复的两次还不同,如图
还有怎么设置YUV422输出,根据探索者给的例程,是不是可以直接在OV2640_JPEG_Mode()函数里,调用YUV422输出就可以了?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
phoenix
2019-07-20 15:16
本帖最后由 phoenix 于 2016-7-16 17:17 编辑
zhang911 发表于 2016-7-9 10:24
如果是YUV输出,怎么将Y分类转换为RGB,请路过的做过OV2640的前辈们多多指教
先得让OV2640输出YUV422格式数据
void OV2640_YUV422_Mode(void);//设置OV2640输出YUV422.(YUYV)格式(16位数据的高字节为亮度值Y)
{
u8 temp;
SCCB_slave_address = 0x60; //设备的地址(0x60用于写/0x61用于读)
write_SCCB(0xff, 0x00); //要设置0xDA寄存器,必须让0xFF=0x00
write_SCCB(0xda, 0x00);//设置OV2640输出YUYV格式
temp = read_SCCB(0xc2); //读寄存器 0xc2 并赋值给temp
temp &= 0xef; //变量temp 位4为0
write_SCCB(0xc2, temp);//寄存器 0xc2 位4为0
}
如格式正确输出,LCD上会出现五颜六 {MOD}的波纹图像,然后你在把Y分量转换为灰度输出到LCD上。
定义个变量:
u16 Gray;//灰度值
Gray =(((yuv422>>(8+3))<<11)|((yuv422>>(8+2))<<5)|((yuv422>>(8+3))<<0));
这是把YUV422格式转换为灰度值以RGB565格式显示在LCD上
yuv422 即:YVYU 格式(16位) ,其中,Y为亮度值(8位)。
奇次输出YV(16位) ,偶次输出YU(16位),按此规律循环输出直至最后数据。就是说YVYU 格式数据每次输出(16位)的数据高字节部分为亮度值 Y 。
RGB565格式为(16位),即R为16位中的高5位,即G为16位中的中6位,即B为16位中的低5位。
因此:
yuv422>>(8+3);//即,只取Y值的高5位(丢弃U或V)
yuv422>>(8+2);//即,只取Y值的高6位(丢弃U或V)
yuv422>>(8+3);//即,只取Y值的高5位(丢弃U或V)
把这三个(高5位、高6位、高5位)Y值位或运算,即可得灰度图像值(RGB565格式)
就是这个:
Gray =(((yuv422>>(8+3))<<11)|((yuv422>>(8+2))<<5)|((yuv422>>(8+3))<<0));
加载中...
查看其它19个回答
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
先得让OV2640输出YUV422格式数据
void OV2640_YUV422_Mode(void);//设置OV2640输出YUV422.(YUYV)格式(16位数据的高字节为亮度值Y)
{
u8 temp;
SCCB_slave_address = 0x60; //设备的地址(0x60用于写/0x61用于读)
write_SCCB(0xff, 0x00); //要设置0xDA寄存器,必须让0xFF=0x00
write_SCCB(0xda, 0x00);//设置OV2640输出YUYV格式
temp = read_SCCB(0xc2); //读寄存器 0xc2 并赋值给temp
temp &= 0xef; //变量temp 位4为0
write_SCCB(0xc2, temp);//寄存器 0xc2 位4为0
}
如格式正确输出,LCD上会出现五颜六 {MOD}的波纹图像,然后你在把Y分量转换为灰度输出到LCD上。
定义个变量:
u16 Gray;//灰度值
Gray =(((yuv422>>(8+3))<<11)|((yuv422>>(8+2))<<5)|((yuv422>>(8+3))<<0));
这是把YUV422格式转换为灰度值以RGB565格式显示在LCD上
yuv422 即:YVYU 格式(16位) ,其中,Y为亮度值(8位)。
奇次输出YV(16位) ,偶次输出YU(16位),按此规律循环输出直至最后数据。就是说YVYU 格式数据每次输出(16位)的数据高字节部分为亮度值 Y 。
RGB565格式为(16位),即R为16位中的高5位,即G为16位中的中6位,即B为16位中的低5位。
因此:
yuv422>>(8+3);//即,只取Y值的高5位(丢弃U或V)
yuv422>>(8+2);//即,只取Y值的高6位(丢弃U或V)
yuv422>>(8+3);//即,只取Y值的高5位(丢弃U或V)
把这三个(高5位、高6位、高5位)Y值位或运算,即可得灰度图像值(RGB565格式)
就是这个:
Gray =(((yuv422>>(8+3))<<11)|((yuv422>>(8+2))<<5)|((yuv422>>(8+3))<<0));
一周热门 更多>