02.yuyv转rgb888代码优化
一.前言
最近准备做一个图形检测项目练手,奈何选用的UVC摄像头支持YUYV或MJPG格式不能直接使用,对网上大部分关于yuyv转rgb888转化算法都如下原代码所示(我自己也搞不清这代码是从那抄的,所以未贴引用网址)。虽然有现成代码现成可抄来用,奈何选用平台主控NUC977(主频300M,不支持浮点运算和硬件解码)实在太差,直接怼上去比放PPT还慢。随其改其代码,主要针对浮点运算修改,以及重复计算修改,改完之后可以明显感觉到性能提升。
大家可以进行查阅,比较学习,敝人也是参考各位大佬代码,希望可以共同学习,如有意见可以共同讨论。
二.原代码
int video_device::yuyv_2_rgb888(const void *p, int size, unsigned char *frame_buffer)
{int i,j;unsigned char y1,y2,u,v;int r1,g1,b1,r2,g2,b2;const char *pointer;size++;pointer = (const char *)p;for(i=0;i<480;i++){for(j=0;j<320;j++){y1 = *( pointer + (i*320+j)*4);u = *( pointer + (i*320+j)*4 + 1);y2 = *( pointer + (i*320+j)*4 + 2);v = *( pointer + (i*320+j)*4 + 3);r1 = y1 + 1.042*(v-128);g1 = y1 - 0.34414*(u-128) - 0.71414*(v-128);b1 = y1 + 1.772*(u-128);r2 = y2 + 1.042*(v-128);g2 = y2 - 0.34414*(u-128) - 0.71414*(v-128);b2 = y2 + 1.772*(u-128);if(r1>255) r1 = 255;else if(r1<0) r1 = 0;if(b1>255) b1 = 255;else if(b1<0) b1 = 0;if(g1>255) g1 = 255;else if(g1<0) g1 = 0;if(r2>255) r2 = 255;else if(r2<0) r2 = 0;if(b2>255) b2 = 255;else if(b2<0) b2 = 0;if(g2>255) g2 = 255;else if(g2<0) g2 = 0;*(frame_buffer + ((480-1-i)*320+j)*6 ) = (unsigned char)b1;*(frame_buffer + ((480-1-i)*320+j)*6 + 1) = (unsigned char)g1;*(frame_buffer + ((480-1-i)*320+j)*6 + 2) = (unsigned char)r1;*(frame_buffer + ((480-1-i)*320+j)*6 + 3) = (unsigned char)b2;*(frame_buffer + ((480-1-i)*320+j)*6 + 4) = (unsigned char)g2;*(frame_buffer + ((480-1-i)*320+j)*6 + 5) = (unsigned char)r2;}}// pr_debug("\tchange to RGB OK \n");return 0;
}
三.优化代码
int video_device::yuyv_2_rgb888(const void *p, int size, unsigned char *frame_buffer)
{int i,j;unsigned char y1,y2;int r1,g1,b1,r2,g2,b2,u,v;unsigned char *pointer;for(i=0; i<size; i++){pointer = (unsigned char *)p + i*4;y1 = * pointer++;u = *( pointer++) - 128;y2 = *( pointer++);v = *( pointer ) - 128;r1 = (266*v) >> 8;g1 = (88*u) + ((183*v)) >> 8;b1 = (454*u) >> 8;r2 = y2 + r1;g2 = y2 - g1;b2 = y2 + b1;r1 = y1 + r1;g1 = y1 - g1;b1 = y1 + b1;if(r1>255) r1 = 255;else if(r1<0) r1 = 0;if(b1>255) b1 = 255;else if(b1<0) b1 = 0;if(g1>255) g1 = 255;else if(g1<0) g1 = 0;if(r2>255) r2 = 255;else if(r2<0) r2 = 0;if(b2>255) b2 = 255;else if(b2<0) b2 = 0;if(g2>255) g2 = 255;else if(g2<0) g2 = 0;pointer = frame_buffer + i*6;*(pointer++) = (unsigned char)b1;*(pointer++) = (unsigned char)g1;*(pointer++) = (unsigned char)r1;*(pointer++) = (unsigned char)b2;*(pointer++) = (unsigned char)g2;*(pointer ) = (unsigned char)r2;}// pr_debug("\tchange to RGB OK \n");return 0;
}
02.yuyv转rgb888代码优化相关推荐
- 数仓建模 项目_音乐数据项目火力全开,技能双倍提升!
↑ 点击上方"尚学堂"关注我们 音乐数据中心数仓综合项目 1项目介绍 音乐数据中心项目是大型企业级综合数仓项目,此项目针对音乐数据进行分析,构建数据仓库,建立用户.机器.内容等主题 ...
- Linux下V4L2框架基于SDL库本地USB摄像头监控
Linux下V4L2框架基于SDL库本地USB摄像头监控 1.摄像头框架编程步骤 (1)打开摄像头设备(/dev/video0 ./dev/video1 ) (2)设置图像格式:VIDIOC_S_FM ...
- python的执行效率没有c语言高,Python代码优化
摘自https://www.cnblogs.com/duaimili/p/10275728.html 众所周知,程序的性能好坏影响着用户体验.所以性能是留住用户很重要的一环.Python 语言虽然能做 ...
- python基础===Python 代码优化常见技巧
Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 8 ...
- 02使用常规步骤编译NanoPiM1Plus的Android4.4.2
02使用常规步骤编译NanoPiM1Plus的Android4.4.2 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/5 17:51 版本 ...
- Python 代码优化常见技巧
代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方 ...
- seo代码优化工具_企业seo该怎么优化
同学们大家好,今天分享一下企业官网如何做seo优化,又有哪些Seo的优化流程.在我们刚接手的网站时候,不能盲目的着急去操作,首先要做的是:全面地去分析整个企业网站的各种历史数据.着重检查有没有robo ...
- Java 中代码优化的 30 个小技巧(下)
21 防止死循环 有些小伙伴看到这个标题,可能会感到有点意外,代码中不是应该避免死循环吗?为啥还是会产生死循环? 殊不知有些死循环是我们自己写的,例如下面这段代码: while(true) {if(c ...
- 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇——02
本系列相关链接 尚硅谷 宋红康 JVM教程_01_内存与垃圾回收篇--01 (20210103-20210110) https://blog.csdn.net/wei198621/article/de ...
最新文章
- function收集
- windows组件中没有IIS解决方法
- 使用Socket模拟聊天室
- WebApi接口 - 响应输出xml和json 转
- 宝塔php的opcache模块未载入,宝塔面板CPU负载过高使用opcache扩展的解决方法
- 清除java_如何在Java地毯下有效地清除问题
- 稀疏矩阵建立十字链表c语言,实验6-稀疏矩阵十字链表的存储.doc
- 微软算法面试题(4)
- maya如何导出ue4_ue4 maya max导入导出问题
- angular 设置接口调用地址_[译] 关于 Angular 的变化检测,你需要知道的一切
- 使用加密签名时遇到的一个问题
- VS2011最新版本 新功能 新增特性 简介Visual Studio 2011
- 学习记录:xmind2testcase测试用例模板
- 【二】[详细]针孔相机模型、相机镜头畸变模型、相机标定与OpenCV实现
- 蚁群算法求最值c语言实现,蚁群算法代码(求函数最值)
- HDUOJ 4513 吉哥系列故事——完美队形II
- 六张图片形成立方体并旋转
- docker 离线安装字体库
- 通过复制粘贴输入网址
- Google map获取手机屏幕当前显示地图的范围
热门文章
- PHP爆绝对路径方法总结帖
- 用计算机打字教案,教学设计-有趣的打字练习游戏
- python计算纪念日相关
- JAVA有percentile函数吗_Python numpy.percentile函数方法的使用
- 指数基金投资指南读书笔记
- 从校园人到职业人的转变
- 迷途emlog模板全站好看的变色模板源码
- Android 仿微信小程序开屏页加载loading
- python怎么设置随机数种子_Pytorch在dataloader类中设置shuffle的随机数种子方式
- Ubuntu18.04下 LOAM_Velodyne 的编译安装(PCL为1.8.1)