社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
休息一下
›
信息发布
›
百问FB显示开发图像处理 - JPEG图像处理
返回列表
发新帖
回复
阅
29
|
回
0
aleksib
当前在线
纯净的硅(中级)
最后登录
2024-11-28
在线时间
39 小时
威望
979分
芯积分
492分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
aleksib
282
帖子
0
TA的资源
纯净的硅(中级)
+ 好友
私信
楼主
发表于2024-11-28 14:02
只看该作者
百问FB显示开发图像处理 - JPEG图像处理
[复制链接]
## 2.2 JPEG图像处理 ### 2.2.1 JPEG文件格式和libjpeg编译 JPEG的后缀名为.jpg的图像文件。对于图像内容和信息相同的JPEG文件和BMP文件,JPEG格式的文件要比BMP格式的文件小得多,这是因为JPEG文件是经过JPEG压缩算法后得到的一种文件格式。 相对于BMP格式的文件,JPEG由于压缩算法的关系,其文件解析较为复杂,我们可以利用Linux系统开源的优点,使用开源工具对jpeg文件进行格式的解析和转换。 我们可以使用libjpeg库来对jpeg文件进行格式的解析和转换。libjpeg支持X86,ARM等架构。libjpeg是开源工具,所以可以在网上免费下载。 在使用libjpeg之前,我们先要交叉编译libjpeg的库文件和头文件并存到开发板的文件系统中。以下是libjpeg的编译过程: 1. 解压并进入文件目录 ```c tar xzf libjpeg-turbo-1.2.1.tar.gz cd libjpeg-turbo-1.2.1/ ``` 2. 交叉编译 ```c tar xzf libjpeg-turbo-1.2.1.tar.gz ./configure --prefix=/work/projects/libjpeg-turbo-1.2.1/tmp/ --host=arm-linux make make install ``` 3. 将编译出来的头文件和库文件拷贝到交叉编译器的相应目录下 ```c cd /work/projects/libjpeg-turbo-1.2.1/tmp/include cp * /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include cd /work/projects/libjpeg-turbo-1.2.1/tmp/lib cp *so* -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib ``` 4. 将编译出来的头文件和库文件拷贝到开发板文件系统的相应目录下 ```c cd /work/projects/libjpeg-turbo-1.2.1/tmp/lib cp *.so* /work/nfs_root/fs_mini_mdev_new/lib/ -d ``` ### 2.2.2 libjpeg接口函数的解析和使用 libjpeg的使用方法可以参考解压包中的使用说明libjpeg.txt和例程example.c。libjpeg的使用步骤简单总结如下: **1.** 分配和初始化一个jpeg_compress_struct结构体 ```c cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); ``` **2.** 指定源文件 ```c jpeg_stdio_src(&cinfo, infile); ``` 参数1是步骤1中分配的jpeg_compress_struct类型的结构体 参数2是要解析的JPEG文件的文件句柄。 **3.** 获得jpg信息头并设置解压参数 ```c jpeg_read_header(&cinfo, TRUE); ``` 当调用完这个参数之后,我们就可以通过cinfo中的image_width,image_height等成员来获得图像的信息了。此外我们还可以设置cinfo中的scale_num和scale_denom等成员变量来设置解压参数。 **4.** 启动解压 ```c jpeg_start_decompress(&cinfo); ``` 调用这个函数后,就可以对cinfo所指定的源文件进行解压,并将解压后的数据存到cinfo结构体的成员变量中。 **5.** 读取解压后数据 ```c jpeg_read_scanlines(&cinfo, buffer, 1); ``` 调用这个函数后,可以读取RGB数据到buffer中,参数3能指定读取多少行 **6.** 完成读取 ```c jpeg_finish_decompress(&cinfo); ``` **7.** 释放jpeg_compress_struct结构体 ```c jpeg_destroy_decompress(&cinfo); ``` 完成读取后释放结构体 ### 2.2.3 使用libjpeg把JPEG文件解析为RGB格式,在LCD上显示 根据上节的解析,利用上述的库函数将JPEG文件解析为RGB格式了。 ```c 代码清单2.2 1. /********************************************************************** 2. * 函数名称: IsJpg 3. * 功能描述:判断是否为Jpg文件 4. * 输入参数: ptData - 内含图像信息 5. strFileName - 文件名 6. * 返 回 值:0 - 不是JPG格式 其他-是JPG格式 7. ***********************************************************************/ 8. static int IsJpg(PT_PictureData ptData, const char *strFileName) 9. { 10. int iRet; 11. 12. jpeg_stdio_src(&ptData->tInfo, ptData->ptFp); 13. 14. /* 用jpeg_read_header获得jpeg信息*/ 15. iRet = jpeg_read_header(&ptData->tInfo, TRUE); 16. 17. return (iRet == JPEG_HEADER_OK); 18. } 19. 20. /********************************************************************** 21. * 函数名称: DecodeJpg2Rgb 22. * 功能描述:把JPG文件解析为RGB888格式 23. * 输入参数: ptData - 内含文件信息 24. * strFileName - 文件名 25. * 输出参数:PT_PictureData->pucRgbData - 内含rgb数据 26. * 返 回 值:0 - 成功 其他-失败 27. ***********************************************************************/ 28. static int DecodeJpg2Rgb(const char *strFileName, PT_PictureData ptData){ 29. int iRowSize; 30. unsigned char *pucbuffer; 31. unsigned char *pucHelp;//辅助拷贝变量 32. 33. /* 1.分配和初始化一个jpeg_compress_struct结构体 */ 34. ptData->tInfo.err = jpeg_std_error(&ptData->tJerr); 35. jpeg_create_decompress(&ptData->tInfo); 36. 37. 38. /* 2.指定源文件*/ 39. if ((ptData->ptFp= fopen(strFileName, "rb")) == NULL) { 40. fprintf(stderr, "can't open %s\n", strFileName); 41. return -1; 42. } 43. 44. /* 3.获得jpg信息头并设置解压参数并判断是否为JPEG格式文件 */ 45. if (!IsJpg(ptData, strFileName)) { 46. printf("file is not jpg ...\n"); 47. return -1; 48. } 49. 50. 51. 52. /* 默认尺寸为原尺寸 */ 53. ptData->tInfo.scale_num = 1; 54. ptData->tInfo.scale_denom = 1; 55. /* 4. 启动解压:jpeg_start_decompress */ 56. jpeg_start_decompress(&ptData->tInfo); 57. 58. 59. /* 解压完成后可以通过tInfo中的成员获得图像的某些信息 */ 60. ptData->iWidth= ptData->tInfo.output_width; 61. ptData->iHeight = ptData->tInfo.output_height; 62. ptData->iBpp = ptData->tInfo.output_components*8; 63. /* 计算一行的数据长度 */ 64. iRowSize = ptData->iWidth * ptData->tInfo.output_components; 65. pucbuffer = malloc(iRowSize); 66. ptData->iRgbSize= iRowSize * ptData->iHeight; 67. ptData->pucRgbData = malloc(ptData->iRgbSize); 68. 69. /* pucHelp指向ptData->pucRgbData首地址 */ 70. pucHelp = ptData->pucRgbData; 71. /*5.循环调用jpeg_read_scanlines来一行一行地获得解压的数据 */ 72. while (ptData->tInfo.output_scanline < ptData->tInfo.output_height) 73. { 74. /* 调用jpeg_read_scanlines得到的时候会存到pucbuffer中 */ 75. jpeg_read_scanlines(&ptData->tInfo, &pucbuffer, 1); 76. /* 将数据一行行读到缓冲区中 */ 77. memcpy(pucHelp,pucbuffer,iRowSize); 78. pucHelp+= iRowSize; 79. } 80. free(pucbuffer); 81. /* 6.完成读取 */ 82. jpeg_finish_decompress(&ptData->tInfo); 83. /* 7.释放jpeg_compress_struct结构体 */ 84. jpeg_destroy_decompress(&ptData->tInfo); 85. return 0; 86. } ```
此帖出自
信息发布论坛
点赞
关注
(0)
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
活动
更多>>
中星联华直播 | 高速信号完整性分析与测试 — “码”上行动系列线上讲堂
新栏目器件口碑专辑上线~快来点评吧!
2024 DigiKey 应用说:大模型时代的智能汽车
有奖直播报名中!抢占工业4.1先机 文晔科技日等你来!
罗姆有奖直播 | 重点解析双极型晶体管的实用选型方法和使用方法
STM32N6终于要发布了,ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!
免费下载 | 安森美电动汽车充电白皮书,看碳化硅如何缓解“里程焦虑”!
是德科技有奖直播 | 应对未来高速算力芯片的设计与测试挑战
开源项目
更多>>
DER-191 - 40 W 电源
广州地铁线路图
NCV74250V1GEVB:3.3 V / 150 mA LDO 评估板
STM32H750开发板
M24SR-DISCO-PREM,用于 M24SR 系列动态 NFC/RFID 标签的探索套件
LGT8F328P_LQFP48_BoB核心板
[已验证]CN3767-12V 4A铅酸电池太阳能充电板
DC-DC验证板
LTC6261HDC 桥接式差分输出运算放大器的典型应用
esp8266-WROOM-02D优化版本
随便看看
IU5512S低功耗,1M@1.0A降压稳压器
IU5512S是一款由基准电压源、振荡电路、比较器、PWM/PFM控制电路等构成的CMOS降压DC/DC调整器。利用PWM/PFM自动切换控制电路达到可调占空比,具有全输入电压范围(25V)内的低纹波、高效率和大输出电流等特点。当VIN-VOUT(设置)<0.1V时,直至VIN小于设置的VOU ...
一篇文章讲清楚HDMI 2.1的一切-山泽品牌解析
基于RK3588的运动控制器
E-T-A 汽车电子用智能电源继电器E-1048-8D
51单片机串口数据发送和定时器中断问题
AD键盘
基于MCU+DSP嵌入式平台的机接口与引导设计
键盘折叠式笔记本.我们中国人的设计
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
高压陶瓷电容器
可见光无线通信
漏电保护断路器
2032纽扣电池
视频采集卡
声学水位计
电导电极
光隔离器
盘式电机
混合现实
相关文章
更多>>
三星电子官宣芯片部门高管人事调动 力求扭转不利局面
三星电子周三(11月27日)宣布了一系列管理层调动,主要涉及芯片业务部门。 根据最新任命,负责半导体及设备解决方案(DS)部门的负责人、公司副董事长全永铉(Jun Young-hyun)被委以更大职
TrendForce:NAND 闪存产业 2024Q3 整体营收 176 亿美元,环比增长 4.8%
11 月 27 日消息,行业分析机构 TrendForce 集邦咨询今日表示,NAND 闪存产业在今年三季度整体实现 176 亿美元营收,出现 4.8% 环比增长;对比 2023 年三季度数据,同比
天天说的汽车800V系统,到底是个啥?
“充电五分钟通话一小时”这句广告词似乎也成了电动汽车(EV)行业的追求。 随着电动汽车、混动汽车成为市场主流,人们越来越需要更快的充电速度。现在,直流快速充电器只需30至45分钟即可将电池充至80
博世中国回应全球裁员:此次裁员不涉及中国区
美国能源部拟向 Rivian 提供 66 亿美元贷款,支持电动汽车扩产
国产射频芯片大厂慧智微否认大规模裁员:系小范围组织调整
台积电高雄 2nm 厂举行进机仪式,苹果、AMD 预计是首批客户
曝苹果自研5G基带性能弱于高通:iPhone信号问题无解
蛋白质工程领域的重大突破——AI模型设计六种性能更优蛋白质
曝小米投资的智驾公司纵目科技停发工资?
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
等待很久的STM32N6终于要发布了!
ST首款带有NPU的MCU到底怎么样,欢迎小伙们来STM32全球线上峰会寻找答案!报名峰会,还能赢【开发板、京东卡】呦~12月12日14:00不见不散!
查看 »
有奖直播报名| 高可靠性IGBT新选择 —— 安世半导体650V IGBT
【直播时间】12月19日(周四)下午15:00-16:30
【直播好礼】定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
安世半导体直播报名中
直播主题:安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
直播时间:12月17日(周二)下午14:00
报名就有机会获得:定制双肩商务包、30元京东卡、吸管玻璃杯
查看 »
PI 电源小课堂 | 无 DC-DC 变换实现多路高精度输出反激电源
时间:即日起-12月15日
看视频学习电源干货,答题赢取京东卡!
查看 »
参会有好礼 | 2024 瑞萨电子MCU/MPU工业技术研讨会
深圳站:11月30日(周六)深圳湾万怡酒店
上海站:12月06日(周五)上海喜玛拉雅酒店
奖励设置:现金红包、螺丝刀套装或30元京东卡
查看 »
Littelfuse 新品赋能电子产品安全可靠并高效, 10+挑战等你探索!
Littelfuse 应用赋能星球,覆盖了诸多应用痛点及解决办法,邀请工程师一起探索,解锁更多设计力!
查看 »
下载资料赢好礼!看Vicor模块化电源解决方案如何推动创新
活动时间:即日起-2024年12月31日
如何参与:点击活动页内您想了解的模块,找到资料下载即可参与抽奖,活动结束后统一发奖!
查看 »
有奖活动|英飞凌高密度双相电源模块为高性能运算平台而生
活动时间:即日起-12月15日
活动奖励:蓝牙音箱、氮化镓充电器套装、黑色小背包
查看 »
本月精选下载推荐:
Vishay——选型-汽车级表面贴装和通孔超快整流器
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/10
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
嵌入式系统
单片机
国产芯片交流
电机驱动控制
FPGA/CPLD
模拟电子
电源技术
PCB技术
RF/无线
传感器
综合技术交流
下载中心专版
大学堂专版
测评中心专版
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
行业应用
汽车电子
移动便携
医疗电子
工控电子
安防电子
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛