来自字节流的array2d而不将文件写入磁盘

array2d from bytestream without writing file to disk

是否可以从字节流中初始化 dlib 中的 array2d 对象?

问题是我从外部源接收到包含 png 文件的字节流,我不想创建临时文件,然后将图像从该文件读取到数组中。是否可以跳过写入文件部分?

换句话说,是否可以从保存在内存中的文件构建 array2d 对象?

谢谢

在 dlib 中用 Google 搜索 array2d 并找到这个辅助函数。

   template <
        typename T,
        typename mem_manager
        >
    void deserialize (
        array2d<T,mem_manager>& item, 
        std::istream& in
    );   
    /*!
        provides deserialization support 
    !*/

我不确定将其写入文件然后再读回会得到什么。

制作它的唯一方法 - 使用 OpenCV 或其他可以从内存中读取 PNG 文件的外部库:

size_t png_buffer_size = 1000;// example value
void* png_buffer; // your PNG image
cv::Mat buffer(1, png_buffer_size, CV_8UC1, png_buffer);
cv::Mat decoded = cv::imdecode(buffer, 1); // should be RGBA32 for PNG
dlib::cv_image<rgb_alpha_pixel> img(decoded); // this image can be used inside dlib
....
auto detections = detector(img);  // this image can be used to detect faces for example or inside any other algorithm
...
// if you need array2d - use assign_image
dlib::array2d<rgb_alpha_pixel> arr;
dlib::assign_image(arr, img);

使用 dlib::cv_image 在性能方面是免费的 - 它不会对 cv::Mat 数据进行深层复制,因此您应该使 cv::Mat 存在并且直到 [=23] 才更改=] 被销毁(它在内部保留指针)

如果您需要一些小型 PNG 阅读库 - 您可以尝试 lodepng

而且我认为 dlib 的某些未来版本可以在其中包含此功能