#c #opencv #null #visual-studio-2015 #null-pointer
#c #opencv #null #visual-studio-2015 #нулевой указатель
Вопрос:
Я получаю некоторые ошибки нулевого указателя при выполнении версии выпуска некоторого кода обработки изображений, который я написал на этой неделе. Прошло много времени с тех пор, как я работал с C / C , поэтому я в замешательстве. Я работаю с OpenCV 3.1 в сообществе VS 2015, и мой код компилируется и запускается без проблем в среде отладки. Однако, когда я запускаю его после компиляции в среде выпуска, я получаю нулевые ошибки ptr в самом начале.
#include "stdafx.h"
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include "opencv2/imgcodecs.hpp"
#include <iostream>
using namespace cv;
using namespace std;
Я почти уверен, что он выдает исключение с самых первых строк.
int main(int argc, char* argv[])
{
// reading in both tif files
Mat bg = imread(argv[1], 1);
Mat rad_film = imread(argv[2], 1);
Ошибка, которую я получаю,
Генерируется необработанное исключение: нарушение доступа для чтения.
это был nullptr.
по какой-то причине кажется, что он считывает нулевое изображение / матрицу, но я понятия не имею, почему, тем более, что у него нет проблем в среде отладки.
Отладка также указывает на этот метод в классе Mat как на источник проблемы
inline void Mat::release()
{
if( u amp;amp; CV_XADD(amp;u->refcount, -1) == 1 )
deallocate();
u = NULL;
datastart = dataend = datalimit = data = 0;
for(int i = 0; i < dims; i )
size.p[i] = 0;
}
В частности, он выдает amp;u и «this» в качестве проблем. Я не уверен, как это интерпретировать.
Два изображения, которые я обрабатываю, являются файлами .tif. Я очень новичок как в OpenCV, так и в Visual Studio, и, хотя на этой неделе я столкнулся с некоторой путаницей, это первая проблема, в которой я действительно потерялся. Любая помощь очень ценится!
Редактировать: библиотеки, которые я связываю как для выпуска, так и для отладки, являются:
что касается библиотек, я использую следующее как для выпуска, так и для отладки:
'opencv_calib3d310d.lib'
'opencv_core310d.lib'
'opencv_features2d310d.lib'
'opencv_flann310d.lib'
'opencv_highgui310d.lib'
'opencv_imgcodecs310d.lib'
'opencv_imgproc310d.lib'
opencv_ml310d.lib
opencv_objdetect310d.lib
opencv_photo310d.lib
opencv_shape310d.lib
opencv_stitching310d.lib
opencv_superres310d.lib
opencv_video310d.lib
opencv_videoio310d.lib
opencv_videostab310d.lib`
Комментарии:
1. Что говорит отладчик? Каково значение
argv[1]
иargv[2]
? Возможно, было бы неплохо проверить их, прежде чем слепо передавать их в качестве параметра в дальнейший код… Кроме того, было бы неплохо загрузить файлы изображений, которые вызывают у вас проблемы (не конвертируйте их в другой формат), чтобы другие могли попытаться воспроизвести эту проблему. О, и это 64-битный код? Откуда взялись двоичные файлы OpenCV, которые вы используете? С какими библиотеками вы связываетесь в Debug и Release соответственно?2. значения argv[1] = ‘film_bg.tif’ и argv[2] = ‘film.tif’ соответственно и печатаются через cout без проблем. Это действительно правильные имена файлов. К сожалению, я не могу загружать изображения по причинам, связанным с собственностью, но я думаю, что действительно any .tif будет работать. Файлы беззнаковые, 8 битные в 3 каналах. Я создаю его как приложение Win32, и все файлы OpenCV были получены с веб-сайта OpenCV. Я отредактировал свои включенные библиотеки выше.
3. В выпуске вы должны ссылаться на библиотеки без конечной буквы «d»
4. Отлично, спасибо @Miki. Я думаю, что это решило эту проблему — теперь мне просто нужно выяснить, где находятся остальные библиотеки выпуска для OpenCV…