нарушение доступа к openCV Mat в C ++ - PullRequest
0 голосов
/ 27 октября 2018

Я получаю «Исключение выдается в 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 in main ()

Mat picZERO(fitsSize, fitsSize, PICtypeCV);
Mat picZEROd(fitsSize, fitsSize, DFTtypeCV);

picZERO = loadfits(path);
picZERO.convertTo(picZEROd, DFTtypeCV); //I get the error here

Я думал, что смогу легко решить эту ошибку, так как у меня есть правильные данные прямо перед оператором возврата функции, но, похоже, не могу понять это.

Есть идеи?Спасибо.

1 Ответ

0 голосов
/ 13 июня 2019

Была такая же проблема. В моем случае решением было удалить ссылку на opencv_world343d.dll в конфигурации выпуска. Этот файл только для режима отладки.

(Изначально я следовал этой инструкции http://shailendra.me/tutorial/add-opencv-to-visual-studio-c++-project/)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...