Java 背景减法器抛出';函数cvGetMat'中的数组类型无法识别或不受支持;例外情况
我为这个问题找了很多,但没有找到任何解决办法 我有一个程序,它通过套接字接收JPEG格式的文件数据(以字节为单位),然后我将字节数组转换为Java 背景减法器抛出';函数cvGetMat'中的数组类型无法识别或不受支持;例外情况,java,opencv,javacv,background-substraction,Java,Opencv,Javacv,Background Substraction,我为这个问题找了很多,但没有找到任何解决办法 我有一个程序,它通过套接字接收JPEG格式的文件数据(以字节为单位),然后我将字节数组转换为OpenCV Mat对象,如下所示: Mat mat = Imgcodecs.imdecode(new MatOfByte(byteArray), Imgcodecs.CV_LOAD_IMAGE_UNCHANGED); 它转换得很好,没有任何异常,然后(为了测试用例以确保数据正常),我将Mat对象转换为BufferedImage,然后在JPanel中显示它,
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
或backgroundsubtractorkn
)然后抛出异常,并显示以下消息:
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);
Do阈值
Imgproc.threshold(grayImg, grayImg, 100, 255, Imgproc.THRESH_BINARY);
等等……一切正常
特例:如果我使用网络摄像头(集成或USB摄像头)或从视频文件读取帧,一切都会顺利进行,没有任何例外
现在我不知道为什么会发生此错误或异常,这是背景减法器的错误还是数据中有任何错误
特别提示:我使用的是Java
Languange中的OpenCV最新版本(3.0)您好Bahramdun,我是OpenCV新手。你能帮我在java中初始化背景减法器mog2吗。我做不到。嗨!很容易,您只需执行以下操作即可:mog2=Video.createBackgroundSubtractorMOG2()
或knn=Video.createBackgroundSubtractorKNN()
并且最好像'mog2.setShadowValue(0);'谢谢。。。我感谢你的帮助,非常欢迎!祝你好运!!