利用fstream,将ncnn及opencv的mat存储成bin文件。
ncnn::Mat to bin
std::ios::binary标志指示文件以二进制模式进行读写,
std::ofstream file("output_x86.bin", std::ios::binary);
将input_mat中的宽、高和通道数分别赋值给width、height和channels,
int width = input_mat.w;
int height = input_mat.h;
int channels = input_mat.c;
使用file.write函数将width、height和channels的值以二进制形式写入文件。reinterpret_cast用于将指针类型进行类型转换,这里将 int* 类型转换为 const char* 类型,以便将其作为字节流写入文件,文章来源:https://www.toymoban.com/news/detail-781394.html
file.write(reinterpret_cast<const char*>(&width), sizeof(int));
file.write(reinterpret_cast<const char*>(&height), sizeof(int));
file.write(reinterpret_cast<const char*>(&channels), sizeof(int));
将input_mat.data所指向的数据以二进制形式写入文件。input_mat.data是一个指向input_mat数据的指针,reinterpret_cast将其转换为const char*类型,以便将其作为字节流写入文件。input_mat.cstep * sizeof(float)表示要写入的字节数,input_mat.cstep是input_mat数据中每一行的字节数,乘以 sizeof(float) 表示将所有数据写入文件,文章来源地址https://www.toymoban.com/news/detail-781394.html
file.write(reinterpret_cast<const char*>(input_mat.data), input_mat.cstep * sizeof(float));
file.close();
cv::Mat to bin
std::ofstream file(filename, std::ios::binary);
int width = mat.cols;
int height = mat.rows;
int channels = mat.channels();
file.write(reinterpret_cast<const char*>(&width), sizeof(int));
file.write(reinterpret_cast<const char*>(&height), sizeof(int));
file.write(reinterpret_cast<const char*>(&channels), sizeof(int));
file.write(reinterpret_cast<const char*>(mat.data), mat.total() * mat.elemSize());
file.close();
到了这里,关于将ncnn及opencv的mat存储成bin文件的方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!