将jpg文件转换成bgr二进制文件
为毛我要干这件事,把一张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二进制文件相关推荐
- 海思AI芯片(Hi3519A/3559A)方案学习(十四)JPEG图片转换成bgr文件
原文:https://blog.csdn.net/avideointerfaces/article/details/89931156 前言 在系列文章海思AI芯片(Hi3519A/3559A)方案学习 ...
- py文件转换成pyc文件
py文件转换成pyc文件 pyc介绍 pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高. 而且pyc是一种跨平台的字节 ...
- xpdf将pdf转换为html,(WordExcelPDF文件转换成HTML整理.docx
(WordExcelPDF文件转换成HTML整理 项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:?一.使用Jacob转换Word,Excel为HTML? ...
- Python图片操作-psd_tools:将psd文件转换成BMP
§01 转换psd文件 psd文件是Phtoshop图片格式,使用Python的库psd-tools将它进行转换.最近由逐飞科技提供的 第十六届智能汽车竞赛AI视觉组分赛区数据集 所有的图片输出的 ...
- mpp文件转换excel_怎么将pdf文件转换成excel表格格式呢?
在我们的日常工作当中,有的时候偶尔会出现一些商业E-Mail的发送,但是在发送之前我们是需要将PDF文档中的数据内容转换成Excel表格的形式.所以学会将PDF转Excel的方法很重要,那不知道小伙伴 ...
- python将txt转换为csv_Python Pandas 三行代码将 txt 文件转换成 csv 文件
今天需要处理几个比较大的 txt 文件,每个文件都在 2GB 以上,直接用 Excel 将其转换成 csv 文件显然是不太可行的,于是用 Python 中的数据处理神器 Pandas,三行代码就能搞定 ...
- 【工具】音乐播放相关工具,音乐文件格式转换工具,MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具...
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 最近玩播放音乐又用到了audio.online-convert这个音乐转换工具,好用, ...
- 【PC工具】在线MP3转WAV工具,MP3文件转换成arduino可以直接播放的wav格式
微信关注 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 今天再向大家推荐一个非常方便好用的在线音频转换工具. 之前玩arduino uno开发 ...
- MP3文件转换成arduino可以直接播放的wav格式,MP3转WAV工具
功能:不用安装软件,直接用免费网站工具将MP3音乐文件转换成所需的WAV格式. 网址:https://audio.online-convert.com/convert-to-wav 不需要注册登录,上 ...
最新文章
- PLSQL 的简单命令之四
- JavaScript学习(十)
- 按钮的android程序闪退,Android实例化控件有什么特殊要求吗??怎么程序加了这一段之后就闪退。。...
- 【渝粤教育】 国家开放大学2020年春季 1079高等代数专题研究 参考试题
- 微软将数据保存在玻璃中 可以安全地存储数千年
- RabbitMQ 集群搭建_02_rpm版本(linux环境)
- PHP MySQL基础知识
- 程序员的进阶课-架构师之路(5)-队列
- 万字长文!剖析美团外卖持续交付的前世今生
- 记录一次Tomcat内存泄露原因的追溯
- 第一次Spring总结
- Win11_vs2010镜像安装方法
- vue src动态加载请求获取的图片
- 《深度学习入门-基于Python的理论与实现》第四章带读 – 神经网络的学习
- 2022年电梯考试电梯检验员模拟题及答案
- i.MX Yocto Project User‘s Guide
- 国内常用地图坐标系总结
- 女生找工作,非常有用,好好 收藏,以后肯定能用得上 (转)
- 小汽车的位置(二维坐标运算)
- deepin允许root登录_deepin官网发布深度操作系统15.10