首页 > 编程知识 正文

c语言二进制文件读写,二进制文件怎么打开

时间:2023-05-04 22:20:44 阅读:263155 作者:3264

作者:昌山小屋
来源:CSDN
原文:https://blog.csdn.net/ChuiGeDaQiQiu/article/details/84945901
版权声明:本文为博主原创文章,转载请附上博文链接!
参考为毛我要干这件事,把一张jpg图片转成bgr(注意顺序是bgr)二进制文件?最近在弄华为Hi3519AV100开发板上的一些深度学习的样例程序,没想到它的输入文件不是普通的jpg,而是bgr格式的二进制文件,所以不是我闲得蛋疼。还别说,这样确实是大大节省了空间。我一张3.8M的测试文件(test.jpg),转成二进制后为276K。

以上是引用的博文。

补充一点,海思提供windows Ruyi studio,仿真测试时,可以用jpg bmp等图片类型,但是需要转换成raw数据,速度特别慢,如果提前手动转换好,再拿去仿真测试,直接读入raw数据,速度就快很多。

代码也是参考了博文的代码,根据自己的习惯和环境,做了一点修改,虽然是小的修改,但万一谁刚好需要就拿去用省的自己修改了。

c改成c/++IplImage *改为Mat;widthstep补充一点验证结果visual studio平台编译

代码如下,vs中创建项目,增加源文件cvt2bgr.cpp,配置好opencv头文件和路径,编译、运行。
结果验证:

dog_bike_car.jpg, 768x576,代码中resize成300x300,生成dog_bike_car_300x300.bgr,大小263kb,和海思sample中提供大小一样也是263kb.horse_dog_car_person.jpg, 500x375, resize成224x224,生成horse_dog_car_person_224x224.bgr,大小147kb,和海思sample中提供大小一样也是147kb.将转换好的.bgr,和海思sample提供的bgr,测试结果一样,说明转换正确,大胆拿去用。

#include <unistd.h>#include <stdio.h>#include <math.h>#include <iostream>#include <string>#include "opencv2/opencv.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;typedef unsigned char U_CHAR;int main() {const char *filename = "dog_bike_car.bmp";const char *outname = "dog_bike_car.bgr";int flag = 1;cv::Mat img = cv::imread(filename);if (!img.data){printf("read image errorn");return -1;}//缩放resize(img, img, Size(300, 300)); //224x224//imshow("img",img);//waitKey(0);U_CHAR *data = (U_CHAR*)img.data;int step = img.step;printf("Step: %d, height: %d, width: %dn",step, img.rows, img.cols);FILE *fp = fopen(outname, "wb");int h = img.rows;int w = img.cols;int c = img.channels();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;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。