UVC摄像头开发(三)

        本次主要记录QT以及QML显示UVC摄像头采集图像以及期间可靠性崩溃和刷新频率问题

        在开发UVC摄像头过程中,开始直接将图像显示在FrameBuffer上面,该方式很多猿兄已经写过了方式方法,大家搜一下就可以看到,具体不展开细说。
该方式如果和触摸屏同步使用,打开相机后显示图像会和桌面程序抢占最上层界面进行显示,此种情况下就多了在QT或者QML上直接显示图像。
此时程序设计发生变化如下:

        显然,将UVC摄像头采集到的图像数据显示在QML上,考虑到QT自带QImage就是处理图像的模块,自然该需求变化未QML显示QImage的需求。同样有很多大佬写了关于QML如何显示QImage的案例,典型的方式是重写QQuickImageProvider给QML提供QImage。该方式大家搜一下,有很多实现方式,就不多说。

        这里说一下转换过程,由于UVC摄像头采集到的原始图像数据为YUV数据,如何转至RGB格式进行显示。
        YUV422数据格式:大致为每一组Y分量用一组UV分量,由此可以算出每一个像素占用字节数为:1(Y)+1/2(U)+1/2(V)=2bytes,所以计算大小时图像单帧字节数为:ImgWidth*ImgHeight*2,大致可以理解为每一个Y分量公用两个UV分量,其中YUYV大致排布如下图。


根据YUV转换成RGB模型有如下公式:

R = 1.164*(Y-16) + 1.159*(V-128); 
G = 1.164*(Y-16) - 0.380*(U-128)+ 0.813*(V-128); 
B = 1.164*(Y-16) + 2.018*(U-128)); 

        则可以设计YUV转换成RGB转换函数,由于YUV模型为YUV422(YUYV)模型,这里根据转换模型计算出的RGB分量需要两次分发,保证每一组Y分量公用UV分量。具体函数如下:

int yuv2rgb(int y, int u, int v)
{
     unsigned int pixel32 = 0;
     unsigned char *pixel = (unsigned char *)&pixel32;
     int r, g, b;
     static long int
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值