C ++ OpenCV mat.at дает нарушение прав доступа при использовании данных - PullRequest
1 голос
/ 10 июня 2011

Я использую 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 Ответ

7 голосов
/ 10 июня 2011

Проблема в том, что вы создали матрицу с плавающей точкой (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();
...