我想在来自 postgresql 数据库的 c++ opencv 中加载图像。图像,jpg 扩展名,作为二进制数据(bytea 类型)存储在基础中,我可以通过 libpqxx 访问它。
问题是我不知道如何将数据转换为 cv::Mat 实例。对于常规图像,我可以使用 imread('myImage.jpg', ...),但在这种情况下,我什至无法在 Mat 的数据属性中加载数据库图像,因为它是 jpeg 而不是 bmp。
任何想法 ?是否有一些我可以使用的 opencv 方法可以直接理解二进制数据并将其转换为适当的结构?imdecode() 函数似乎用于位图数据。
编辑:Berak,使用向量 imdecode 函数返回空矩阵会发生什么“如果缓冲区太短或包含无效数据,则返回空矩阵/图像。” 这是代码:
pqxx::result r=bdd::requete("SELECT image FROM lrad.img WHERE id=3",1);//returns the bytea image in r[0]["image"]
const char* buffer=r[0]["image"].c_str();
vector<uchar>::size_type size = strlen((const char*)buffer);
vector<uchar> jpgbytes(buffer, buffer+size);
Mat img = imdecode(jpgbytes, CV_LOAD_IMAGE_COLOR);
//jpgbytes.size()=1416562 img.size()=[0 x 0]
我错过了什么?