Этот код фактически работал до сих пор. Я понятия не имею, что сейчас вызывает ошибку (на самом деле я не помню, чтобы какие-либо изменения в коде). Вот оно (оно читает изображение из файла в объект OpenCV IplImage, а затем преобразует его в буфер jpeg):
IplImage* fIplImageHeader = cvLoadImage( filePath.c_str() );
vector<int> p;
p.push_back( CV_IMWRITE_JPEG_QUALITY );
p.push_back( 75 ); // JPG quality
vector<unsigned char> buf;
cv::imencode( ".jpg", fIplImageHeader, buf, p ); // this line gives error
Полная ошибка:
Unhandled exception at 0x638fee22 in Client.exe: 0xC0000005: Access violation reading location 0x02176000.
fIplImageHeader содержит действительное изображение, которое я могу подтвердить, используя:
cvShowImage( "Window", fIplImageHeader );
EDIT:
Более длинный фрагмент:
while ( l < 30 )
{
// path to image
std::stringstream sstm;
string filePath;
sstm << workingDirectory << "/temp/" << k << ".jpg";
filePath = sstm.str();
cout << filePath.c_str() << endl;
// load image to IplImage
IplImage* fIplImageHeader = cvLoadImage( filePath.c_str() );
// convert to JPG
vector<int> p;
p.push_back( CV_IMWRITE_JPEG_QUALITY );
p.push_back( 75 ); // JPG quality
vector<unsigned char> buf;
cv::imencode( ".jpg", fIplImageHeader, buf, p );
// do stuff
k++;
l++;
if (10 == k)
{
k = 0;
}
char key = cvWaitKey( 1000/30 );
cvReleaseImage( &fIplImageHeader );
}