2010-11-24 12 views
4

バッファjpegBufferにjpegイメージがあります。私はCV :: imdecode関数に渡ししようとしている:イメージファイルの内容がchar配列の場合、cv :: imdecodeの使い方は?

FILE* pFile; 
long lSize; 
char * jpegBuffer; 
pFile = fopen ("img.jpg", "rb"); 
if (pFile == NULL) 
{ 
    exit (1); 
} 

// obtain file size. 
fseek (pFile , 0 , SEEK_END); 
lSize = ftell (pFile); 
rewind (pFile); 

// allocate memory to contain the whole file. 
jpegBuffer = (char*) malloc (lSize); 
if (jpegBuffer == NULL) 
{ 
    exit (2); 
} 

// copy the file into the buffer. 
fread (jpegBuffer, 1, lSize, pFile); 

// terminate 
fclose (pFile); 

答えて

15

マットはありませんがあります。

/home/richard/Desktop/richard/client/src/main.cc:108: error: no matching function for call to ‘cv::Mat::Mat(char*&)’ 

これは私が埋めるかjpegBufferです:

Mat matrixJprg = imdecode(Mat(jpegBuffer), 1); 

は、私はこのエラーを取得しますchar *引数を取るコンストラクタです。代わりにこれを試してみてください:

std::ifstream file("img.jpg"); 
std::vector<char> data; 

file >> std::noskipws; 
std::copy(std::istream_iterator<char>(file), std::istream_iterator<char>(), std::back_inserter(data)); 

Mat matrixJprg = imdecode(Mat(data), 1); 

EDIT:

あなたはまたLoadImageMを見てみる必要があります。

すでにchar *バッファにデータがある場合は、データをstd :: vectorにコピーする方法があります。

std::vector<char> data(buf, buf + size); 
+1

ありがとうございました。しかし、もし私がメモリ上のバッファ(例えばchar * jpegBuffer)の中にイメージを持っていて、それがディスク上にファイルとして保存されていなければどうでしょうか?それでは、バッファをimdecodeにどのように送るでしょうか?上記のコードはちょっとしたテストですが、後でwifi接続からjpgイメージをファイルに保存せずにバッファに読み込むだけです。 –

+0

一般的にchar *バッファは避けてください。通常、これは可能です.WIFI接続から画像を読み込んだときにchar *バッファではなくstd :: vectorに読み込みます。 – ronag

関連する問題