C OpenCV mat.at приводит к нарушению доступа при использовании данных

#c #dll #opencv #access-violation

#c #dll #opencv #нарушение доступа

Вопрос:

Я использую OpenCV 2.1 в Visual Studio 2010 C dll для выполнения матричных операций. DLL получает массивы из VB.NET программа и загружает их в матрицы для некоторых манипуляций. Однако я не могу использовать элемент .at для любого объекта cv ::mat без создания исключения нарушения доступа. Я думал, это потому, что я передавал массивы, но я даже не могу запустить это:

 Mat Rhat(2,1,CV_32FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();
  

Если я удалю .at строку, то она будет работать нормально. Я все это проделал на C, используя типы CvMat, но ему не понравился cvCreateMat и вместо этого он начал работать с пространством имен cv. Все мои функции, отличные от opencv, в dll работают нормально, так что проблема в моей настройке cv или что-то в этом роде.
Кто-нибудь может помочь?

Ответ №1:

Проблема в том, что вы создали матрицу с плавающей точкой (32FC1), и вы пытаетесь получить к ней доступ с помощью double, что приводит к выходу из ограниченного доступа.

Вы можете либо использовать float везде:

 Mat Rhat(2,1,CV_32FC1);
Rhat.at<float>(0,0) = 10;
Rhat.release();
  

или двойной:

 Mat Rhat(2,1,CV_64FC1);
Rhat.at<double>(0,0) = 10;
Rhat.release();
  

Комментарии:

1. Спасибо. Это было все. Упс. Все еще возникают другие проблемы. Я не могу выполнить никаких операций. Однако я начну новую тему.