Так что не передавайте всю структуру Mat
.Вместо этого просто передайте указатель на необработанные данные.
//uchar* ptr2imgData = dynamic_cast<uchar *>( imgPtr );
//cv::Mat img( cv::Size{ WIDTH, HEIGHT }, CV_8UC3, ptr2imgData ); // C++
uchar* ptr2imgData = (uchar *)imgPtr; // uchar is unsigned char
CvMat* img = cvCreateMat( WIDTH, HEIGHT, CV_8UC3 );
img->ptr = imgPtr;
Если тип матрицы и / или размер матрицы могут отличаться, передайте дополнительную информацию в другом аргументе.Если тип матрицы всегда один и тот же, оставьте его жестко запрограммированным и передайте только указатель на данные.
Затем создайте новый Mat
из этих данных.
Я никогда не писал строки Java и яЯ горжусь этим - во всяком случае, я знаю, что нет указателей.Я обнаружил, что вы можете использовать get()
метод
myClass.getImg(img.get(0, 0)); // Beginning of the array
или упомянутый вами getNativeObjAddr()
метод
myClass.getImg(img.getNativeObjAddr());
Ваше решение не может работать и вызывает неопределенное поведение, потому что cvMat
и Mat
- это совершенно разные типы.