gpt4 book ai didi

C++写二进制文件。来自 opencv 矩阵的 uchar* 数据

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:51 25 4
gpt4 key购买 nike

我有一些数据,n 个元素,uchar* data_ptr。我如何将其写入二进制文件并稍后再次读取?

我尝试了以下方法:

std::ofstream myFile ("data.bin", std::ios::out | std::ios::binary);
myFile.write(data_ptr,100);

以上不会编译。 uchar 不是 char。

我该怎么写。以及如何将它再次读入 uchar* 的内存块。

我做了以下测试:

cv::Mat test(10,10,CV_8UC1);
cv::randu(test,0,255);
std::cout << test << std::endl;
assert(test.isContinuous());

std::ofstream myFile1 ("data1.bin", std::ios::out | std::ios::binary);
myFile1.write(reinterpret_cast<char*>(test.data),sizeof(uchar)*100);

uchar buf[100];
std::ifstream myFile ("data1.bin", std::ios::in | std::ios::binary);
myFile.read(reinterpret_cast<char*>(buf), sizeof(buf));
cv::Mat test1(10,10,CV_8UC1,buf);
std::cout << test1 << std::endl;

cv::waitKey();

得到如下输出:

[91, 2, 79, 179, 52, 205, 236, 8, 181, 239;
26, 248, 207, 218, 45, 183, 158, 101, 102, 18;
118, 68, 210, 139, 198, 207, 211, 181, 162, 197;
191, 196, 40, 7, 243, 230, 45, 6, 48, 173;
242, 125, 175, 90, 63, 90, 22, 112, 221, 167;
224, 113, 208, 123, 214, 35, 229, 6, 143, 138;
98, 81, 118, 187, 167, 140, 218, 178, 23, 43;
133, 154, 150, 76, 101, 8, 38, 238, 84, 47;
7, 117, 246, 163, 237, 69, 129, 60, 101, 41;
190, 50, 90, 72, 168, 109, 121, 220, 114, 248]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 127, 2, 0, 0;
32, 0, 0, 0, 255, 255, 0, 0, 178, 116;
36, 101, 35, 0, 28, 5, 248, 227, 87, 0;
43, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
0, 0, 205, 18, 246, 118, 251, 10, 251, 118]

显然这两个矩阵是不一样的。对哪里出错有什么意见吗?

最佳答案

要写入,您可以简单地将数据转换为char*:

file.write(reinterpret_cast<char*>(data_ptr), 100); // writes 100 bytes

要阅读,您需要一个 istream 并且再次需要一个转换:

uchar buf[100];
input.read(reinterpret_cast<char*>(buf), sizeof(buf));

关于C++写二进制文件。来自 opencv 矩阵的 uchar* 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com