是否可以从字节流初始化array2d
中的dlib
对象?
问题是我从外部源接收包含png文件的字节流,我不想创建临时文件,然后将该文件中的图像读入数组。是否可以跳过写入文件部分?
另一方面,是否可以从保存在内存中的文件构建array2d对象?
由于
答案 0 :(得分:4)
唯一的方法 - 使用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存在并且在cv_image被销毁之前不会改变(它保持指针内侧)
如果您需要一些小的PNG阅读库 - 您可以尝试lodepng
我认为dlib的未来版本可以在
中使用此功能答案 1 :(得分:-3)
在dlib中使用Google搜索了array2d并找到了这个辅助函数。
template <
typename T,
typename mem_manager
>
void deserialize (
array2d<T,mem_manager>& item,
std::istream& in
);
/*!
provides deserialization support
!*/
我不确定将它写入文件然后将其读回来会得到你。