#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. Спасибо. Это было все. Упс. Все еще возникают другие проблемы. Я не могу выполнить никаких операций. Однако я начну новую тему.