Проблема с 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
]

0 ответов

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