4914|13

108

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

F7从USB摄像头读取回来的图像数据显示在LCD上不正常,求助!!! [复制链接]

本帖最后由 zhanghuichun 于 2015-11-11 21:05 编辑

采集回来的YUY2数据转换成RGB565格式之后显示出来的效果居然是这样的。

YUY2转RGB565代码:
  1. static void replace_yuy2_to_rgb565_1(uint8_t *buf, uint32_t len)
  2. {
  3.         int32_t c, d, e, r, g, b;
  4.         
  5.         len = len >> 2;
  6.         while (len)
  7.         {               
  8.                 d = buf[1] - 128;
  9.                 e = buf[3] - 128;
  10.                
  11.                 c = buf[0] - 16;
  12.                 r = (298 * c + 409 * e + 128) >> 8;
  13.                 if (r < 0)
  14.                         r = 0;
  15.                 else if (r > 255)
  16.                         r = 255;
  17.                 g = (298 * c - 100 * d - 208 * e + 128) >> 8;
  18.                 if (g < 0)
  19.                         g = 0;
  20.                 else if (g > 255)
  21.                         g = 255;
  22.                 b = (298 * c + 516 * d + 128) >> 8;
  23.                 if (b < 0)
  24.                         b = 0;
  25.                 else if (b > 255)
  26.                         b = 255;
  27.                
  28.                 //r = 255;
  29.                 //g = 255;
  30.                 //b = 255;
  31.                         
  32.                 *(uint16_t *)buf = ((r & 0xf8) << 11) | ((g & 0xfc) << 5) | ((b & 0xf8) >> 3);
  33.                 buf += 2;
  34.                
  35.                 c = buf[0] - 16;
  36.                 r = (298 * c + 409 * e + 128) >> 8;
  37.                 if (r < 0)
  38.                         r = 0;
  39.                 else if (r > 255)
  40.                         r = 255;
  41.                 g = (298 * c - 100 * d - 208 * e + 128) >> 8;
  42.                 if (g < 0)
  43.                         g = 0;
  44.                 else if (g > 255)
  45.                         g = 255;
  46.                 b = (298 * c + 516 * d + 128) >> 8;
  47.                 if (b < 0)
  48.                         b = 0;
  49.                 else if (b > 255)
  50.                         b = 255;
  51.                
  52.                 //r = 255;
  53.                 //g = 255;
  54.                 //b = 255;
  55.                
  56.                 *(uint16_t *)buf = ((r & 0xf8) << 11) | ((g & 0xfc) << 5) | ((b & 0xf8) >> 3);               
  57.                 buf += 2;
  58.                
  59.                 len--;
  60.         }
  61. }
复制代码
数据处理代码:
  1. void uvc_decode_report_recv(void *dev_data, struct vsfusbh_uvc_param_t *param,
  2.                 struct vsfusbh_uvc_payload_t *payload)
  3. {
  4.         uint8_t RGB_Buff[2000];
  5.         uint8_t YUY_Buff[2000];
  6.         uint32_t i=0;
  7.         if (dev_data == NULL)
  8.                 return;
  9.         
  10.         if (test_uvc_data == NULL)
  11.         {
  12.                 struct vsfusbh_uvc_param_t param = {1, 1, 0,
  13.                                 VSFUSBH_UVC_VIDEO_FORMAT_YUY2, 30, 640, 480};
  14.                 test_uvc_data = dev_data;
  15.                 vsfusbh_uvc_set(dev_data, ¶m);
  16.         }
  17.         else if (payload != NULL)
  18.         {
  19.                 if (payload->len > 12)
  20.                 {         
  21.                         // just for record frame length
  22.                         if (frame_cnt < 300)
  23.                         {
  24.                               replace_yuy2_to_rgb565_1(&payload->buf[12], payload->len - 12);
  25.                               fill_frame_rgb565(&payload->buf[12], payload->len - 12, frame_shift);
  26.                                 frame_bytes[frame_cnt] += payload->len - 12;
  27.                                 if (payload->buf[1] & 0x2)
  28.                                 {
  29.                                         frame_cnt++;
  30.                                         frame_shift = 0;
  31.                                 }
  32.                                 else
  33.                                 {
  34.                                 frame_shift += (payload->len - 12) / 2;
  35.                                 }
  36.                         }
  37.                         else
  38.                         {
  39.                                 frame_cnt = 0;
  40.                                 memset(frame_bytes, 0, sizeof(frame_bytes));
  41.                         }
  42.                 }
  43.         }
  44.         else
  45.         {
  46.                 // get current param
  47.         }
  48. }
复制代码


此帖出自stm32/stm8论坛

最新回复

能给穿一份代码看看吗?   详情 回复 发表于 2016-6-12 13:14
点赞 关注
 

回复
举报

2057

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
楼主很厉害,用单片机调UVC的摄像头
此帖出自stm32/stm8论坛
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
IC爬虫 发表于 2015-11-11 21:32
楼主很厉害,用单片机调UVC的摄像头

不是我写的驱动,是le062大神写的,我负责显示部分
此帖出自stm32/stm8论坛
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

4
 
本帖最后由 247153481 于 2015-11-13 11:20 编辑

你在看看f7的像素显示格式就知道了我上次也遇到这个问题,后来发现f7的格式是argb?还是agbr来着?
反正是这样
此帖出自stm32/stm8论坛
 
 
 

回复

2057

帖子

0

TA的资源

五彩晶圆(初级)

5
 
我看图像这样可能是像素数据对齐的方式反了?
有高位对齐和低位对齐
此帖出自stm32/stm8论坛
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

6
 
F7学习中,帮顶一下
此帖出自stm32/stm8论坛
 
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

7
 
颜色不对,应该是yuv数据格式问题,你把yuv图片数据保存下来,然后到电脑上打开看看知道了,如果图片正确显示,就是rgb转换后的显示正常,那就是渲染问题了,送你个yuv调试工具~

YUV Player windows with reg key.rar (535.99 KB, 下载次数: 28)
此帖出自stm32/stm8论坛
 
个人签名HELLO_WATER
 
 

回复

1403

帖子

1

TA的资源

纯净的硅(中级)

8
 
shinykongcn 发表于 2015-11-13 11:27
颜色不对,应该是yuv数据格式问题,你把yuv图片数据保存下来,然后到电脑上打开看看知道了,如果图片正确显 ...

只接触过手机端的视频,格式多用yuv420,不过这个影响不大,如果显示不对,一般存在的原因无非是,采集到的yuv数据格式不是预设的(表现问颜色不对)、采集到的yuv数据分辨率不对(表现为图像显示不全或者很块)
此帖出自stm32/stm8论坛
 
个人签名HELLO_WATER
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

9
 
247153481 发表于 2015-11-13 11:15
你在看看f7的像素显示格式就知道了我上次也遇到这个问题,后来发现f7的格式是argb?还是agbr来着?
反正是 ...

我已经把lcd显示模式改为RGB565了,默认是ARGB8888
此帖出自stm32/stm8论坛
 
 
 

回复

108

帖子

0

TA的资源

一粒金砂(中级)

10
 
IC爬虫 发表于 2015-11-13 11:21
我看图像这样可能是像素数据对齐的方式反了?
有高位对齐和低位对齐

能具体说说么?
此帖出自stm32/stm8论坛
 
 
 

回复

954

帖子

0

TA的资源

纯净的硅(初级)

11
 
那就把数据发往电脑看看吧,确定问题所在
此帖出自stm32/stm8论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
大神们,求助,F7有开发的IAR版本和破解文件么?
此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

13
 
大神,正准备用F7来驱动UVC的,但是不太理解之前的一堆堆配置以及同步传输到底是怎么个驱动方式,求解惑啊
此帖出自stm32/stm8论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

14
 
能给穿一份代码看看吗?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表