来自字节流的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 的某些未来版本可以在其中包含此功能
是否可以从字节流中初始化 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 的某些未来版本可以在其中包含此功能