postgresql 데이터베이스에서 가져온 C++ opencv에서 이미지를로드하려고합니다. 이미지 (jpg 확장자)는 libpqxx 덕분에 액세스 할 수있는베이스에 바이너리 데이터 (bytea 유형)로 저장됩니다.opencv 이진 데이터 jpg 이미지를 cv :: Mat
문제는 데이터를 cv :: Mat 인스턴스로 변환하는 방법을 모른다는 것입니다. 일반 이미지를 사용하면 imread ('myImage.jpg', ...)를 사용할 수 있지만이 경우 jpeg가 아니고 bmp이기 때문에 Mat의 데이터 속성에 데이터베이스 이미지를로드 할 수도 없습니다.
아이디어가 있으십니까? 이진 데이터를 직접 이해하고 적절한 구조로 변환 할 수있는 opencv 메서드가 있습니까? imdecode() 함수는 비트 맵 데이터에 사용되는 것 같습니다.
편집 : Berak, 벡터를 사용하여 imdecode 함수가 null을 반환합니다. Matrice "버퍼가 너무 짧거나 유효하지 않은 데이터가 포함 된 경우 빈 행렬/이미지가 반환됩니다." 코드는 다음과 같습니다.
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]
무엇이 누락 되었습니까?
어떻게 이미지를 저장 했습니까? (sql 유형) – berak