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