BackgroundSubtractor выдает "Нераспознанный или неподдерживаемый тип массива в функцию cvGetMat" Исключение

Я много искал эту проблему, но не нашел решения.

У меня есть программа, которая получает данные файла формата JPEG через сокет (в байтах), затем я преобразую массив байтов в OpenCV Mat объект как показано ниже:

Mat mat = Imgcodecs.imdecode(new MatOfByte(byteArray), Imgcodecs.CV_LOAD_IMAGE_UNCHANGED);

Он хорошо конвертируется без каких-либо исключений, затем (для тестового примера, чтобы убедиться, что данные в порядке), я конвертирую Mat Возражать BufferedImage а затем показать это в JPanelвсе идет хорошо без каких-либо исключений.

Но когда я подаю заявку:

mog2.apply(mat, foregroundImg, -1); // tried 1, 0, 0.003 etc

ИЛИ ЖЕ

knn.apply(mat, foregroundImg, -1); // tried 1, 0, 0.003 etc

mat в BackgroundSubtractor (любой из BackgroundSubtractorMOG2 или же BackgroundSubtractorKNN) затем выдает исключение со следующим сообщением:

OpenCV Error: Bad flag (parameter or structure field) (Unrecognized or unsupported array type) in cvGetMat, file C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\array.cpp, line 2494

Затем я меняю тип Mat как следует, но выдает ту же ошибку

Mat newMat = new Mat();
mat.convertTo(newMat, CvType.CV_8UC3)

Для теста я сделал еще одну операцию на этом mat чтобы убедиться, что он работает с другими функциями OpenCV, но все работает хорошо, например:

Преобразовать в серый

Imgproc.cvtColor(mat, grayImg, Imgproc.COLOR_RGB2GRAY);

Сделать порог

Imgproc.threshold(grayImg, grayImg, 100, 255, Imgproc.THRESH_BINARY);

И так далее... все работает без каких-либо исключений.

Особый случай: если я использую веб-камеру (встроенную или USB-камеру) или считываю кадры из видеофайла, все идет хорошо, без каких-либо исключений.

Теперь я не знаю, почему происходит эта ошибка или исключение, это ошибка с BackgroundSubtractor или что-то не так в данных?

Специальное примечание: я использую последнюю версию OpenCV (3.0) в Java Languange

0 ответов

Другие вопросы по тегам