为毛我要干这件事,把一张jpg图片转成bgr(注意顺序是bgr)二进制文件?最近在弄华为Hi3519AV100开发板上的一些深度学习的样例程序,没想到它的输入文件不是普通的jpg,而是bgr格式的二进制文件,所以不是我闲得蛋疼。还别说,这样确实是大大节省了空间。我一张3.8M的测试文件(test.jpg),转成二进制后为276K。

源代码:

#include <unistd.h>
#include <stdio.h>
#include <math.h>#include "opencv2/imgcodecs/imgcodecs_c.h"typedef unsigned char U_CHAR;int main(int argc, char* argv[]) {if(argc != 3) {fprintf(stderr, "Usage:%s [src_file] [out_file]\n", argv[0]);exit(-1);}IplImage *img = 0;const char *filename = argv[1];const char *outname = argv[2];int flag = 1;img = cvLoadImage(filename, flag);if (img == 0) {printf("Load image error\n");return -1;}U_CHAR *data = (U_CHAR*)img->imageData;int step = img->widthStep;printf("widthStep: %d, height: %d, width: %d\n",step, img->height, img->width);FILE *fp = fopen(outname, "wb");int h = img->height;int w = img->width;int c = img->nChannels;//注意遍历顺序for (int k=0; k<c; k++) {for (int i=0; i<h; i++) {for(int j=0; j<w; j++) {fwrite(&data[i*step + j*c + k], sizeof(U_CHAR), 1, fp);}}}fclose(fp);return 0;
}

编译:

g++ cvt2bgr.c -o cvt2bgr `pkg-config --libs --cflags opencv` -Wall

pkg-config --libs --cflgas opencv是作甚?因为代码里面要用到opencv,所以需要在编译命令中给出库文件和头文件所在路径。为了不过于冗长,直接用一条命令代替了,展开来看就是下面这个样子的:

[zuosi@localhost]$pkg-config --cflags opencv       
-I/usr/local/include/opencv -I/usr/local/include
[zuosi@localhost]$pkg-config --libs opencv         
-L/usr/local/lib -lopencv_cudabgsegm -lopencv_cudaobjdetect -lopencv_cudastereo -lopencv_dnn -lopencv_ml -lopencv_shape -lopencv_stitching -lopencv_cudafeatures2d -lopencv_superres -lopencv_cudacodec -lopencv_videostab -lopencv_cudaoptflow -lopencv_cudalegacy -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_photo -lopencv_imgcodecs -lopencv_cudawarping -lopencv_cudaimgproc -lopencv_cudafilters -lopencv_video -lopencv_objdetect -lopencv_imgproc -lopencv_flann -lopencv_cudaarithm -lopencv_core -lopencv_cudev

为了检验一下代码的正确性,我转一个华为给的样例图片,然后对比一下md5。

[zuosi@localhost test]$file double_roipooling_224_224.jpg
double_roipooling_224_224.jpg: JPEG image data,
JFIF standard 1.01, resolution (DPI),
density 72x72, segment length 16, baseline, precision 8,
224x224, frames 3
[zuosi@localhost test]$md5sum double_roipooling_224_224.*
bfadf0b2d90fe3b5ee7caeb581e199c5  double_roipooling_224_224.bgr
ee577e3a1415ea677104987b46b0d2a4  double_roipooling_224_224.jpg

选了上面double_roipooling_224_224.jpg这个文件,他的尺寸是224x224,正好华为给了这个尺寸的bgr,所以可以拿来对比验证。把代码编译好后,执行以下命令:

[zuosi@localhost test]$./cvt2bgr double_roipooling_224_224.jpg my_test.bgr
widthStep: 672, height: 224, width: 224
[zuosi@localhost test]$md5sum my_test.bgr
bfadf0b2d90fe3b5ee7caeb581e199c5  my_test.bgr

这里my_test.bgr是用上面的代码生成的,可见其md5与华为给的md5是一样的,都是bfadf0b2d90fe3b5ee7caeb581e199c5。

将jpg文件转换成bgr二进制文件相关推荐

  1. 海思AI芯片(Hi3519A/3559A)方案学习(十四)JPEG图片转换成bgr文件

    原文:https://blog.csdn.net/avideointerfaces/article/details/89931156 前言 在系列文章海思AI芯片(Hi3519A/3559A)方案学习 ...

  2. py文件转换成pyc文件

    py文件转换成pyc文件 pyc介绍 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高. 而且pyc是一种跨平台的字节 ...

  3. xpdf将pdf转换为html,(WordExcelPDF文件转换成HTML整理.docx

    (WordExcelPDF文件转换成HTML整理 项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:?一.使用Jacob转换Word,Excel为HTML? ...

  4. Python图片操作-psd_tools:将psd文件转换成BMP

    §01 转换psd文件   psd文件是Phtoshop图片格式,使用Python的库psd-tools将它进行转换.最近由逐飞科技提供的 第十六届智能汽车竞赛AI视觉组分赛区数据集 所有的图片输出的 ...

  5. mpp文件转换excel_怎么将pdf文件转换成excel表格格式呢?

    在我们的日常工作当中,有的时候偶尔会出现一些商业E-Mail的发送,但是在发送之前我们是需要将PDF文档中的数据内容转换成Excel表格的形式.所以学会将PDF转Excel的方法很重要,那不知道小伙伴 ...

  6. python将txt转换为csv_Python Pandas 三行代码将 txt 文件转换成 csv 文件

    今天需要处理几个比较大的 txt 文件,每个文件都在 2GB 以上,直接用 Excel 将其转换成 csv 文件显然是不太可行的,于是用 Python 中的数据处理神器 Pandas,三行代码就能搞定 ...

  7. 【工具】音乐播放相关工具,音乐文件格式转换工具,MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具...

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 最近玩播放音乐又用到了audio.online-convert这个音乐转换工具,好用, ...

  8. 【PC工具】在线MP3转WAV工具,MP3文件转换成arduino可以直接播放的wav格式

    微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天再向大家推荐一个非常方便好用的在线音频转换工具. 之前玩arduino uno开发 ...

  9. MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具

    功能:不用安装软件,直接用免费网站工具将MP3音乐文件转换成所需的WAV格式. 网址:https://audio.online-convert.com/convert-to-wav 不需要注册登录,上 ...

最新文章

  1. PLSQL 的简单命令之四
  2. JavaScript学习(十)
  3. 按钮的android程序闪退,Android实例化控件有什么特殊要求吗??怎么程序加了这一段之后就闪退。。...
  4. 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
  5. 微软将数据保存在玻璃中 可以安全地存储数千年
  6. RabbitMQ 集群搭建_02_rpm版本(linux环境)
  7. PHP MySQL基础知识
  8. 程序员的进阶课-架构师之路(5)-队列
  9. 万字长文!剖析美团外卖持续交付的前世今生
  10. 记录一次Tomcat内存泄露原因的追溯
  11. 第一次Spring总结
  12. Win11_vs2010镜像安装方法
  13. vue src动态加载请求获取的图片
  14. 《深度学习入门-基于Python的理论与实现》第四章带读 – 神经网络的学习
  15. 2022年电梯考试电梯检验员模拟题及答案
  16. i.MX Yocto Project User‘s Guide
  17. 国内常用地图坐标系总结
  18. 女生找工作,非常有用,好好 收藏,以后肯定能用得上 (转)
  19. 小汽车的位置(二维坐标运算)
  20. deepin允许root登录_deepin官网发布深度操作系统15.10

热门文章

  1. 《智能手机心率和呼吸率测量算法的前瞻性验证》阅读笔记
  2. 至强服务器系统配置截图,至强服务器操作系统
  3. 思科计算机网络设计局域网,CISCO局域网设计(毕业设计)_图文.doc
  4. win10开机蓝屏_WIN10系统开机蓝屏解决方法一
  5. 家里宽带申请公网 IP(二)
  6. 小陈的JAVA笔记-2022.03.15
  7. Xbox One 升级后黑屏修复
  8. 75道程序员逻辑思维面试题
  9. tableau-当工作表没有数据时显示无
  10. 知乎敲定在港发售价:募资8亿港元,徐新旗下今日资本上演大撤退