我知道有多个 C++ 库可以使用 cURL 从 Amazon S3 访问数据。使用它们,我可以将图像下载到本地机器,将其读入 OpenCV,然后删除原始文件。
但是,我想知道是否可以直接从 S3 将图像直接读取到 OpenCV 中,例如 Mat 对象。
有人能帮我完成这个吗?
我知道有多个 C++ 库可以使用 cURL 从 Amazon S3 访问数据。使用它们,我可以将图像下载到本地机器,将其读入 OpenCV,然后删除原始文件。
但是,我想知道是否可以直接从 S3 将图像直接读取到 OpenCV 中,例如 Mat 对象。
有人能帮我完成这个吗?
使用cv::imdecode,它将带有一些图像数据(png、jpeg 等)的缓冲区从内存加载到矩阵中。
// Suppose that a std::vector<char> contains the data loaded by Curl.
std::vector<char> data;
// The template<typename T> explicit cv::Mat::Mat(const std::vector<T>& vec)
// constructor gives this vector a cv::Mat header.
cv::Mat data_mat(data);
// Now use cv::imdecode to decode the image to a BGR matrix.
cv::Mat image(cv::imdecode(data_mat));
所以,这就是我必须做的,就 Poco 方面而言。
std::auto_ptr<std::istream> pStr(URIStreamOpener::defaultOpener().open(uri));
StreamCopier::copyToString(*pStr.get(), str);
这会将图像从提供的 URI 获取到字符串中str
,而无需任何中间存储。其余的就像 Kristoff 解释的那样。