Проблема с OpenCV BackgroundSubtractor
Я пытаюсь использовать BackgroundSubtractor
класс OpenCV в Java, который два подкласса BackgroundSubtractorMOG2
а также BackgroundSubtractorKNN
и собирается вычесть фон из кадра видеопотока, эти кадры поступают с сетевой IP-камеры в bytes
в JPEG
формат, после этого я преобразую байты в OpenCV Mat
объект таким образом:
Mat mat = Imgcodecs.imdecode(new MatOfByte(data), Imgcodecs.CV_LOAD_IMAGE_UNCHANGED);
а затем передать его BackgroundSubtractor
применить метод:
mog2.apply(mat, foregroundImg, -1); // tried 1, 0, 0.003 etc
// or
//knn.apply(mat, foregroundImg, -1); // tried 1, 0, 0.003 etc
Он выдаст исключение со следующим сообщением:
Corrupt JPEG data: 2 extraneous bytes before marker 0xd9
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
Теперь я не знаю, в чем может быть причина. Это ошибка с BackgroundSubtractor
или в коде есть ошибки
Чтобы убедиться, что преобразованный Mat не имеет проблем, я использовал некоторые другие функции OpenCV, чтобы проверить, говорит ли та же Ошибка, но работает ли все другие функции, такие как:
Преобразовать в серый
Imgproc.cvtColor(mat, grayImg, Imgproc.COLOR_RGB2GRAY);
Сделать порог
Imgproc.threshold(grayImg, grayImg, 100, 255, Imgproc.THRESH_BINARY);
Примечание. Когда я использую веб-камеру (встроенную или USB) или считываю кадры из видеофайла, все идет хорошо с одним и тем же кодом.
Отредактировано: все сообщение об ошибке:
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
CvException [org.opencv.core.CvException: cv::Exception: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\array.cpp:2494: error: (-206) Unrecognized or unsupported array type in function cvGetMat
]
at com.test.subtractor.VideoStream.start(VideoStream.java:107)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: CvException [org.opencv.core.CvException: cv::Exception: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\array.cpp:2494: error: (-206) Unrecognized or unsupported array type in function cvGetMat
]