我已经搜索了很多这个问题,但我找不到任何解决方案。
我有一个程序通过套接字(以字节为单位)接收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函数一起使用,但一切正常,如:< / p>
转换为灰色
Imgproc.cvtColor(mat, grayImg, Imgproc.COLOR_RGB2GRAY);
做阈值
Imgproc.threshold(grayImg, grayImg, 100, 255, Imgproc.THRESH_BINARY);
依此类推...... 所有工作都毫无例外。
特殊情况:如果我使用网络摄像头(集成或USB摄像头)或从视频文件中读取帧,一切顺利,没有任何例外。
现在我不知道为什么会出现此错误或异常,这是BackgroundSubtractor
的错误还是数据有问题?
特别提示:我在Java
Languange中使用OpenCV最新版本(3.0)