Я получаю сообщение «Исключение выдается в 0x00007FFF428944E0 (opencv_world343d.dll) в … .exe: 0xC0000005: расположение чтения нарушения доступа 0x0000023339631FB8». Я прочитал некоторые посты и темы о «нарушении прав доступа», но думаю, что правильно распределяю и инициализирую память, что, по-видимому, является проблемой чаще всего.
Мой код содержит функцию «loadfits», которая загружает 16-битное изображение в градациях серого и сохраняет его в openCV cv :: Mat. Функция работает — прямо в конце перед оператором return я могу показать или сохранить изображение, и все работает отлично, внутри функции. Но когда я пытаюсь получить доступ и работать с cv :: Mat в main (), я получаю ошибку нарушения доступа.
#define DFTtypeCV CV_64FC1
#define PICtypeCV CV_16UC1 //16bit grayscale image
Mat loadfits(std::string path)
{
ifstream streamIN(path, ios::binary | ios::in);
vector<char> celyobraz_8(fitsSize*fitsSize * 2, 0);
streamIN.read(&celyobraz_8[0], fitsSize*fitsSize * 2);
... //some code
Mat fits_PICTURE_Mat = Mat(fitsSize, fitsSize, PICtypeCV, &celyobraz_8[0], Mat::AUTO_STEP);
showimg(fits_PICTURE_Mat, "fitsRaw"); //shows the correct image
return fits_PICTURE_Mat; //returns the same image
}
Затем я использую эту функцию для инициализации и работы с cv :: Mat в main ()
Mat picZERO(fitsSize, fitsSize, PICtypeCV);
Mat picZEROd(fitsSize, fitsSize, DFTtypeCV);
picZERO = loadfits(path);
picZERO.convertTo(picZEROd, DFTtypeCV); //I get the error here
Я думал, что смогу легко решить эту ошибку, так как у меня есть правильные данные прямо перед оператором возврата функции, но, похоже, не могу понять это.
Есть идеи? Благодарю.
Задача ещё не решена.
Других решений пока нет …