BackgroundSubtractor在函数cvGetMat'中抛出'无法识别或不支持的数组类型。例外

时间:2015-12-19 08:27:59

标签: java opencv javacv background-substraction

我已经搜索了很多这个问题,但我找不到任何解决方案。

我有一个程序通过套接字(以字节为单位)接收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

matBackgroundSubtractorBackgroundSubtractorMOG2BackgroundSubtractorKNN中的任何一个)然后它会抛出异常并显示以下消息:

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函数一起使用,但一切正常,如:< / p>

转换为灰色

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

做阈值

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

依此类推...... 所有工作都毫无例外。

特殊情况:如果我使用网络摄像头(集成或USB摄像头)或从视频文件中读取帧,一切顺利,没有任何例外。

现在我不知道为什么会出现此错误或异常,这是BackgroundSubtractor的错误还是数据有问题?

特别提示:我在Java Languange中使用OpenCV最新版本(3.0)

0 个答案:

没有答案